diff --git a/.gas-snapshot b/.gas-snapshot index 4e40ad02..cc7d5bdc 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,2 +1,19 @@ -AccountFactoryTest:testAccountFactory(uint256) (runs: 256, μ: 130276, ~: 130276) -KernelTest:testKernel() (gas: 190) \ No newline at end of file +KernelExecutionTest:test_mode_2() (gas: 593614) +KernelExecutionTest:test_mode_2() (gas: 611256) +KernelExecutionTest:test_mode_2_1() (gas: 589400) +KernelExecutionTest:test_mode_2_erc165() (gas: 2485466) +KernelExecutionTest:test_revert_when_mode_disabled() (gas: 192767) +KernelExecutionTest:test_sudo() (gas: 216219) +KernelHelperTest:testIntersect(uint48,uint48,uint48,uint48) (runs: 256, μ: 2379, ~: 2383) +KernelTest:test_disable_mode() (gas: 170757) +KernelTest:test_disable_mode() (gas: 172824) +KernelTest:test_external_call_default() (gas: 28844) +KernelTest:test_external_call_execution() (gas: 520197) +KernelTest:test_initialize_twice() (gas: 20515) +KernelTest:test_initialize_twice() (gas: 20537) +KernelTest:test_set_default_validator() (gas: 427634) +KernelTest:test_set_default_validator() (gas: 429679) +KernelTest:test_set_execution() (gas: 477930) +KernelTest:test_set_execution() (gas: 479975) +KernelTest:test_validate_signature() (gas: 171911) +KernelTest:test_validate_signature() (gas: 175529) \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index ac2a4fe4..918f59a3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ path = lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts branch = v4.8.2 +[submodule "lib/solady"] + path = lib/solady + url = https://github.com/vectorized/solady diff --git a/audits/kalos_v1.pdf b/audits/kalos_v1.pdf index 3f16c572..a437ef76 100644 Binary files a/audits/kalos_v1.pdf and b/audits/kalos_v1.pdf differ diff --git a/audits/kalos_v2_1.pdf b/audits/kalos_v2_1.pdf new file mode 100644 index 00000000..29d0a8ea Binary files /dev/null and b/audits/kalos_v2_1.pdf differ diff --git a/broadcast/DeployECDSAValidator.s.sol/1/run-1692154943.json b/broadcast/DeployECDSAValidator.s.sol/1/run-1692154943.json new file mode 100644 index 00000000..a900de67 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/1/run-1692154943.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x1e807ae181a24f2c44339f04aa56222c11fbc0d53b5458ae9e65a45382f309a4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xf", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x1e807ae181a24f2c44339f04aa56222c11fbc0d53b5458ae9e65a45382f309a4" + ], + "returns": {}, + "timestamp": 1692154943, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/1/run-1692154962.json b/broadcast/DeployECDSAValidator.s.sol/1/run-1692154962.json new file mode 100644 index 00000000..8ca76926 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/1/run-1692154962.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x1e807ae181a24f2c44339f04aa56222c11fbc0d53b5458ae9e65a45382f309a4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xf", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x1e807ae181a24f2c44339f04aa56222c11fbc0d53b5458ae9e65a45382f309a4", + "transactionIndex": "0xc", + "blockHash": "0xbb24851954e2f94de22291ff3d28f8f60c534a5816bbd905ba9ba5c280f4c0f9", + "blockNumber": "0x11181e7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x263b57", + "gasUsed": "0x4fcb6", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x6b12eeec4" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692154962, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/1/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/1/run-latest.json new file mode 100644 index 00000000..8ca76926 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/1/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x1e807ae181a24f2c44339f04aa56222c11fbc0d53b5458ae9e65a45382f309a4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xf", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x1e807ae181a24f2c44339f04aa56222c11fbc0d53b5458ae9e65a45382f309a4", + "transactionIndex": "0xc", + "blockHash": "0xbb24851954e2f94de22291ff3d28f8f60c534a5816bbd905ba9ba5c280f4c0f9", + "blockNumber": "0x11181e7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x263b57", + "gasUsed": "0x4fcb6", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x6b12eeec4" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692154962, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/10/run-1692128913.json b/broadcast/DeployECDSAValidator.s.sol/10/run-1692128913.json new file mode 100644 index 00000000..17f2037f --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/10/run-1692128913.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xba526e1950db6c4e43c5ecea204773f340ffb69f04f46c12e5cfc5ba86a176d7", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xba526e1950db6c4e43c5ecea204773f340ffb69f04f46c12e5cfc5ba86a176d7" + ], + "returns": {}, + "timestamp": 1692128913, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/10/run-1692128920.json b/broadcast/DeployECDSAValidator.s.sol/10/run-1692128920.json new file mode 100644 index 00000000..548e7487 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/10/run-1692128920.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xba526e1950db6c4e43c5ecea204773f340ffb69f04f46c12e5cfc5ba86a176d7", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xba526e1950db6c4e43c5ecea204773f340ffb69f04f46c12e5cfc5ba86a176d7", + "transactionIndex": "0x1", + "blockHash": "0x310c289baa22d6c3e4ed91a73e4697ddbfe3409ffa8996089c7524fc84fbe100", + "blockNumber": "0x673fe6d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5b3a5", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb8d8d7c2" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128920, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/10/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/10/run-latest.json new file mode 100644 index 00000000..548e7487 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/10/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xba526e1950db6c4e43c5ecea204773f340ffb69f04f46c12e5cfc5ba86a176d7", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xba526e1950db6c4e43c5ecea204773f340ffb69f04f46c12e5cfc5ba86a176d7", + "transactionIndex": "0x1", + "blockHash": "0x310c289baa22d6c3e4ed91a73e4697ddbfe3409ffa8996089c7524fc84fbe100", + "blockNumber": "0x673fe6d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5b3a5", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb8d8d7c2" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128920, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/100/run-1692129469.json b/broadcast/DeployECDSAValidator.s.sol/100/run-1692129469.json new file mode 100644 index 00000000..ca111711 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/100/run-1692129469.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xe4b455c0d4786c2ad8ca43cf84b3a2c3405e960df063ca74f34583738a8d9805", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xe4b455c0d4786c2ad8ca43cf84b3a2c3405e960df063ca74f34583738a8d9805" + ], + "returns": {}, + "timestamp": 1692129469, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/100/run-1692129489.json b/broadcast/DeployECDSAValidator.s.sol/100/run-1692129489.json new file mode 100644 index 00000000..04ede4d7 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/100/run-1692129489.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xe4b455c0d4786c2ad8ca43cf84b3a2c3405e960df063ca74f34583738a8d9805", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe4b455c0d4786c2ad8ca43cf84b3a2c3405e960df063ca74f34583738a8d9805", + "transactionIndex": "0x0", + "blockHash": "0x5266bec9cdd7137e2f13e703d7cdd91a7b3b1aa474dace7de395ef039acb6d3e", + "blockNumber": "0x1c1cb95", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fcb6", + "gasUsed": "0x4fcb6", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129489, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/100/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/100/run-latest.json new file mode 100644 index 00000000..04ede4d7 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/100/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xe4b455c0d4786c2ad8ca43cf84b3a2c3405e960df063ca74f34583738a8d9805", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe4b455c0d4786c2ad8ca43cf84b3a2c3405e960df063ca74f34583738a8d9805", + "transactionIndex": "0x0", + "blockHash": "0x5266bec9cdd7137e2f13e703d7cdd91a7b3b1aa474dace7de395ef039acb6d3e", + "blockNumber": "0x1c1cb95", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fcb6", + "gasUsed": "0x4fcb6", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129489, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/137/run-1692126959.json b/broadcast/DeployECDSAValidator.s.sol/137/run-1692126959.json new file mode 100644 index 00000000..4919ef08 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/137/run-1692126959.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x1f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb" + ], + "returns": {}, + "timestamp": 1692126959, + "chain": 137, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/137/run-1692126966.json b/broadcast/DeployECDSAValidator.s.sol/137/run-1692126966.json new file mode 100644 index 00000000..6ea0a441 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/137/run-1692126966.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x1f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionIndex": "0x3b", + "blockHash": "0xd694d4bbc61dbd1c2c5b0c58db27576b7f47a3df1f727a089b14b0d26b89e4cb", + "blockNumber": "0x2c333d7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xbc4fb4", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x0000000000000000000000000000000000000000000000000036f5dc554005cc0000000000000000000000000000000000000000000000172955ddf65a59eeb300000000000000000000000000000000000000000000073863b3e3f13c7b0faa000000000000000000000000000000000000000000000017291ee81a0519e8e700000000000000000000000000000000000000000000073863ead9cd91bb1576", + "blockHash": "0xd694d4bbc61dbd1c2c5b0c58db27576b7f47a3df1f727a089b14b0d26b89e4cb", + "blockNumber": "0x2c333d7", + "transactionHash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionIndex": "0x3b", + "logIndex": "0x193", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000080000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000080000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x5a7ba38f18" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692126966, + "chain": 137, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/137/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/137/run-latest.json new file mode 100644 index 00000000..6ea0a441 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/137/run-latest.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x1f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionIndex": "0x3b", + "blockHash": "0xd694d4bbc61dbd1c2c5b0c58db27576b7f47a3df1f727a089b14b0d26b89e4cb", + "blockNumber": "0x2c333d7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xbc4fb4", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x0000000000000000000000000000000000000000000000000036f5dc554005cc0000000000000000000000000000000000000000000000172955ddf65a59eeb300000000000000000000000000000000000000000000073863b3e3f13c7b0faa000000000000000000000000000000000000000000000017291ee81a0519e8e700000000000000000000000000000000000000000000073863ead9cd91bb1576", + "blockHash": "0xd694d4bbc61dbd1c2c5b0c58db27576b7f47a3df1f727a089b14b0d26b89e4cb", + "blockNumber": "0x2c333d7", + "transactionHash": "0xc77bb1834d57250f75893ac6e9211649c14d3599e1ff57a722121c961ba9fafb", + "transactionIndex": "0x3b", + "logIndex": "0x193", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000080000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000080000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x5a7ba38f18" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692126966, + "chain": 137, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/420/run-1692073702.json b/broadcast/DeployECDSAValidator.s.sol/420/run-1692073702.json new file mode 100644 index 00000000..f9b9cae3 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/420/run-1692073702.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x6214f72edf6e53d34ba87df32336b7a873f714dbf6e9c49c4e3551640691b4fd", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x6214f72edf6e53d34ba87df32336b7a873f714dbf6e9c49c4e3551640691b4fd" + ], + "returns": {}, + "timestamp": 1692073702, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/420/run-1692073709.json b/broadcast/DeployECDSAValidator.s.sol/420/run-1692073709.json new file mode 100644 index 00000000..fa3e10d7 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/420/run-1692073709.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x6214f72edf6e53d34ba87df32336b7a873f714dbf6e9c49c4e3551640691b4fd", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x6214f72edf6e53d34ba87df32336b7a873f714dbf6e9c49c4e3551640691b4fd", + "transactionIndex": "0x1", + "blockHash": "0x41776253f999789bf7caac1aa96d096ec98842c6c212f6b656bd56370fb1ee8d", + "blockNumber": "0xcb4a42", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5b375", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073709, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/420/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/420/run-latest.json new file mode 100644 index 00000000..fa3e10d7 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/420/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x6214f72edf6e53d34ba87df32336b7a873f714dbf6e9c49c4e3551640691b4fd", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x6214f72edf6e53d34ba87df32336b7a873f714dbf6e9c49c4e3551640691b4fd", + "transactionIndex": "0x1", + "blockHash": "0x41776253f999789bf7caac1aa96d096ec98842c6c212f6b656bd56370fb1ee8d", + "blockNumber": "0xcb4a42", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5b375", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073709, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/42161/run-1692128749.json b/broadcast/DeployECDSAValidator.s.sol/42161/run-1692128749.json new file mode 100644 index 00000000..91aaa817 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/42161/run-1692128749.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x094132364f757d6a4916fd8acb93ad6fbd5a54ec6af3f86282108ef839b9a14e", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf5fb26", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xd" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x094132364f757d6a4916fd8acb93ad6fbd5a54ec6af3f86282108ef839b9a14e", + "transactionIndex": "0x1", + "blockHash": "0x653d678a8fe1e3e74f65099eab95280ba7f2cdbdd3a85e99446cc487f2f4ca95", + "blockNumber": "0x74170aa", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa67f4b", + "gasUsed": "0xa67f4b", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128749, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/42161/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/42161/run-latest.json new file mode 100644 index 00000000..91aaa817 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/42161/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x094132364f757d6a4916fd8acb93ad6fbd5a54ec6af3f86282108ef839b9a14e", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf5fb26", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xd" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x094132364f757d6a4916fd8acb93ad6fbd5a54ec6af3f86282108ef839b9a14e", + "transactionIndex": "0x1", + "blockHash": "0x653d678a8fe1e3e74f65099eab95280ba7f2cdbdd3a85e99446cc487f2f4ca95", + "blockNumber": "0x74170aa", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa67f4b", + "gasUsed": "0xa67f4b", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128749, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/421613/run-1692072434.json b/broadcast/DeployECDSAValidator.s.sol/421613/run-1692072434.json new file mode 100644 index 00000000..afbec142 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/421613/run-1692072434.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xfb80378dfa8e4845fe16a9f454d97062c86c91b6ee209306b361cd6d4cfc0c3a", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x68f73", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xfb80378dfa8e4845fe16a9f454d97062c86c91b6ee209306b361cd6d4cfc0c3a", + "transactionIndex": "0x1", + "blockHash": "0xc681a77973ebdd1490e289a0746e77a0bf2f78fdfe540820164feb697fe847a0", + "blockNumber": "0x20d64fc", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fc64", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072434, + "chain": 421613, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/421613/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/421613/run-latest.json new file mode 100644 index 00000000..afbec142 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/421613/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xfb80378dfa8e4845fe16a9f454d97062c86c91b6ee209306b361cd6d4cfc0c3a", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x68f73", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xfb80378dfa8e4845fe16a9f454d97062c86c91b6ee209306b361cd6d4cfc0c3a", + "transactionIndex": "0x1", + "blockHash": "0xc681a77973ebdd1490e289a0746e77a0bf2f78fdfe540820164feb697fe847a0", + "blockNumber": "0x20d64fc", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fc64", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072434, + "chain": 421613, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/43113/run-1692072788.json b/broadcast/DeployECDSAValidator.s.sol/43113/run-1692072788.json new file mode 100644 index 00000000..1a41cf49 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/43113/run-1692072788.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xdef448581f7dfbe4a4a29100cbbf0155f5524e5f792495407458c34a47ffa4f4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xdef448581f7dfbe4a4a29100cbbf0155f5524e5f792495407458c34a47ffa4f4" + ], + "returns": {}, + "timestamp": 1692072788, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/43113/run-1692072795.json b/broadcast/DeployECDSAValidator.s.sol/43113/run-1692072795.json new file mode 100644 index 00000000..73c150dc --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/43113/run-1692072795.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xdef448581f7dfbe4a4a29100cbbf0155f5524e5f792495407458c34a47ffa4f4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xdef448581f7dfbe4a4a29100cbbf0155f5524e5f792495407458c34a47ffa4f4", + "transactionIndex": "0x0", + "blockHash": "0x4e6bbb1f2b1c754e30d41d791a10fcc17461969537c7980a725b4d29d1dd6b2b", + "blockNumber": "0x17d9e71", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fc64", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072795, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/43113/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/43113/run-latest.json new file mode 100644 index 00000000..73c150dc --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/43113/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xdef448581f7dfbe4a4a29100cbbf0155f5524e5f792495407458c34a47ffa4f4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xdef448581f7dfbe4a4a29100cbbf0155f5524e5f792495407458c34a47ffa4f4", + "transactionIndex": "0x0", + "blockHash": "0x4e6bbb1f2b1c754e30d41d791a10fcc17461969537c7980a725b4d29d1dd6b2b", + "blockNumber": "0x17d9e71", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fc64", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072795, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/43114/run-1692129083.json b/broadcast/DeployECDSAValidator.s.sol/43114/run-1692129083.json new file mode 100644 index 00000000..691e6fe1 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/43114/run-1692129083.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xce12ea207e9ac35c100bd130e8f6ddc27ab2e0f606d921809b8dbab79a79ec1f", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xce12ea207e9ac35c100bd130e8f6ddc27ab2e0f606d921809b8dbab79a79ec1f" + ], + "returns": {}, + "timestamp": 1692129083, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/43114/run-1692129090.json b/broadcast/DeployECDSAValidator.s.sol/43114/run-1692129090.json new file mode 100644 index 00000000..bd565754 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/43114/run-1692129090.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xce12ea207e9ac35c100bd130e8f6ddc27ab2e0f606d921809b8dbab79a79ec1f", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xce12ea207e9ac35c100bd130e8f6ddc27ab2e0f606d921809b8dbab79a79ec1f", + "transactionIndex": "0x2", + "blockHash": "0x9374509e7473afc90c301f5a0255665b7e2bee89d50d1f25e081b99801c574bc", + "blockNumber": "0x2064258", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5fa72", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129090, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/43114/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/43114/run-latest.json new file mode 100644 index 00000000..bd565754 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/43114/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xce12ea207e9ac35c100bd130e8f6ddc27ab2e0f606d921809b8dbab79a79ec1f", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xce12ea207e9ac35c100bd130e8f6ddc27ab2e0f606d921809b8dbab79a79ec1f", + "transactionIndex": "0x2", + "blockHash": "0x9374509e7473afc90c301f5a0255665b7e2bee89d50d1f25e081b99801c574bc", + "blockNumber": "0x2064258", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5fa72", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129090, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/5/run-1692071959.json b/broadcast/DeployECDSAValidator.s.sol/5/run-1692071959.json new file mode 100644 index 00000000..9828850f --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/5/run-1692071959.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xd1657459c55647995c88934fd41bb81b8c1ea215a7137405046329434dd8aad4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x4c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xd1657459c55647995c88934fd41bb81b8c1ea215a7137405046329434dd8aad4" + ], + "returns": {}, + "timestamp": 1692071959, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/5/run-1692071966.json b/broadcast/DeployECDSAValidator.s.sol/5/run-1692071966.json new file mode 100644 index 00000000..2059cba5 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/5/run-1692071966.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xd1657459c55647995c88934fd41bb81b8c1ea215a7137405046329434dd8aad4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x4c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xd1657459c55647995c88934fd41bb81b8c1ea215a7137405046329434dd8aad4", + "transactionIndex": "0x2b", + "blockHash": "0x6958fec33f92bf90f69236161d37881a06e133e36777d09855157cc281f867f5", + "blockNumber": "0x9143d1", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf17500", + "gasUsed": "0x4fcb6", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e10a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692071966, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/5/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/5/run-latest.json new file mode 100644 index 00000000..2059cba5 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/5/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xd1657459c55647995c88934fd41bb81b8c1ea215a7137405046329434dd8aad4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x4c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xd1657459c55647995c88934fd41bb81b8c1ea215a7137405046329434dd8aad4", + "transactionIndex": "0x2b", + "blockHash": "0x6958fec33f92bf90f69236161d37881a06e133e36777d09855157cc281f867f5", + "blockNumber": "0x9143d1", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf17500", + "gasUsed": "0x4fcb6", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e10a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692071966, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/56/run-1692288632.json b/broadcast/DeployECDSAValidator.s.sol/56/run-1692288632.json new file mode 100644 index 00000000..3d27f335 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/56/run-1692288632.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xb42d04182ab19cef86f0aa91501a5ba55b4d248bbb80940c814948becf3d6143", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xb42d04182ab19cef86f0aa91501a5ba55b4d248bbb80940c814948becf3d6143" + ], + "returns": {}, + "timestamp": 1692288632, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/56/run-1692288638.json b/broadcast/DeployECDSAValidator.s.sol/56/run-1692288638.json new file mode 100644 index 00000000..33da989e --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/56/run-1692288638.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xb42d04182ab19cef86f0aa91501a5ba55b4d248bbb80940c814948becf3d6143", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xb42d04182ab19cef86f0aa91501a5ba55b4d248bbb80940c814948becf3d6143", + "transactionIndex": "0x17", + "blockHash": "0x843ddf34b52be968ec97feb6517133bf7fa04219b4f2418e15f37a05ef63cdf4", + "blockNumber": "0x1d80c7a", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2a8c91", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288638, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/56/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/56/run-latest.json new file mode 100644 index 00000000..33da989e --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/56/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xb42d04182ab19cef86f0aa91501a5ba55b4d248bbb80940c814948becf3d6143", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xb42d04182ab19cef86f0aa91501a5ba55b4d248bbb80940c814948becf3d6143", + "transactionIndex": "0x17", + "blockHash": "0x843ddf34b52be968ec97feb6517133bf7fa04219b4f2418e15f37a05ef63cdf4", + "blockNumber": "0x1d80c7a", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2a8c91", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288638, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/8453/run-1692129357.json b/broadcast/DeployECDSAValidator.s.sol/8453/run-1692129357.json new file mode 100644 index 00000000..c9c35d31 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/8453/run-1692129357.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x67ac8a2141514ec3391bb8c6828fcc8067ab1da4654fc3be63e29a3c5e61cfaf", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x67ac8a2141514ec3391bb8c6828fcc8067ab1da4654fc3be63e29a3c5e61cfaf" + ], + "returns": {}, + "timestamp": 1692129357, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/8453/run-1692129364.json b/broadcast/DeployECDSAValidator.s.sol/8453/run-1692129364.json new file mode 100644 index 00000000..c5c697b1 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/8453/run-1692129364.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x67ac8a2141514ec3391bb8c6828fcc8067ab1da4654fc3be63e29a3c5e61cfaf", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x67ac8a2141514ec3391bb8c6828fcc8067ab1da4654fc3be63e29a3c5e61cfaf", + "transactionIndex": "0x1", + "blockHash": "0x5a40c7c747b5c8d2d35e7ad57b54918ea93d6affaf61a7a8a39172f7cdb975d2", + "blockNumber": "0x28bdb7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5c1a9", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e33" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129364, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/8453/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/8453/run-latest.json new file mode 100644 index 00000000..c5c697b1 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/8453/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x67ac8a2141514ec3391bb8c6828fcc8067ab1da4654fc3be63e29a3c5e61cfaf", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x67ac8a2141514ec3391bb8c6828fcc8067ab1da4654fc3be63e29a3c5e61cfaf", + "transactionIndex": "0x1", + "blockHash": "0x5a40c7c747b5c8d2d35e7ad57b54918ea93d6affaf61a7a8a39172f7cdb975d2", + "blockNumber": "0x28bdb7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5c1a9", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e33" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129364, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/84531/run-1692074144.json b/broadcast/DeployECDSAValidator.s.sol/84531/run-1692074144.json new file mode 100644 index 00000000..6abe9035 --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/84531/run-1692074144.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xfb7faa1a3a9239c18711ba8f57d2a582e9a45d93f67c912e302adb361f98eec6", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xfb7faa1a3a9239c18711ba8f57d2a582e9a45d93f67c912e302adb361f98eec6" + ], + "returns": {}, + "timestamp": 1692074144, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/84531/run-1692074152.json b/broadcast/DeployECDSAValidator.s.sol/84531/run-1692074152.json new file mode 100644 index 00000000..82401eeb --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/84531/run-1692074152.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xfb7faa1a3a9239c18711ba8f57d2a582e9a45d93f67c912e302adb361f98eec6", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xfb7faa1a3a9239c18711ba8f57d2a582e9a45d93f67c912e302adb361f98eec6", + "transactionIndex": "0x1", + "blockHash": "0x4557834e70285d27e0ebbea327e2ca724a2d6e5be9e26e9cfaf33fd78de8a114", + "blockNumber": "0x80c9ca", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5b369", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074152, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployECDSAValidator.s.sol/84531/run-latest.json b/broadcast/DeployECDSAValidator.s.sol/84531/run-latest.json new file mode 100644 index 00000000..82401eeb --- /dev/null +++ b/broadcast/DeployECDSAValidator.s.sol/84531/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xfb7faa1a3a9239c18711ba8f57d2a582e9a45d93f67c912e302adb361f98eec6", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6e303", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xfb7faa1a3a9239c18711ba8f57d2a582e9a45d93f67c912e302adb361f98eec6", + "transactionIndex": "0x1", + "blockHash": "0x4557834e70285d27e0ebbea327e2ca724a2d6e5be9e26e9cfaf33fd78de8a114", + "blockNumber": "0x80c9ca", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5b369", + "gasUsed": "0x4fc64", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074152, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/1/run-1692129664.json b/broadcast/DeployKernel.s.sol/1/run-1692129664.json new file mode 100644 index 00000000..4bb0b2f7 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/1/run-1692129664.json @@ -0,0 +1,75 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129664, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/1/run-1692154809.json b/broadcast/DeployKernel.s.sol/1/run-1692154809.json new file mode 100644 index 00000000..3fafb18d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/1/run-1692154809.json @@ -0,0 +1,78 @@ +{ + "transactions": [ + { + "hash": "0x2577eae4baa9e99168452171c71f30eb70eca9542e3070b5b2918f05f6cd58b3", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdb12bc1c423ffca1eef467ca1344fc82146948aed5105b5482893a4b62cfc953", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x2577eae4baa9e99168452171c71f30eb70eca9542e3070b5b2918f05f6cd58b3", + "0xdb12bc1c423ffca1eef467ca1344fc82146948aed5105b5482893a4b62cfc953" + ], + "returns": {}, + "timestamp": 1692154809, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/1/run-latest.json b/broadcast/DeployKernel.s.sol/1/run-latest.json new file mode 100644 index 00000000..3fafb18d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/1/run-latest.json @@ -0,0 +1,78 @@ +{ + "transactions": [ + { + "hash": "0x2577eae4baa9e99168452171c71f30eb70eca9542e3070b5b2918f05f6cd58b3", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdb12bc1c423ffca1eef467ca1344fc82146948aed5105b5482893a4b62cfc953", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x2577eae4baa9e99168452171c71f30eb70eca9542e3070b5b2918f05f6cd58b3", + "0xdb12bc1c423ffca1eef467ca1344fc82146948aed5105b5482893a4b62cfc953" + ], + "returns": {}, + "timestamp": 1692154809, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10/run-1689775171.json b/broadcast/DeployKernel.s.sol/10/run-1689775171.json new file mode 100644 index 00000000..bc69d7e8 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10/run-1689775171.json @@ -0,0 +1,101 @@ +{ + "transactions": [ + { + "hash": "0x9eabb670d04f8c9f127cba04f297f397c223b46fefca06efbea38edcb8989878", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x0a0059cb41d0fcfe629b750f97cf875ca9be1b9c752a8c0706a8544c820009e4", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x2" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x46db2675757ec201a213cbf532b6827bd8f7a287a93eb0a1f3dcd84c208985b3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x9eabb670d04f8c9f127cba04f297f397c223b46fefca06efbea38edcb8989878", + "0x0a0059cb41d0fcfe629b750f97cf875ca9be1b9c752a8c0706a8544c820009e4", + "0x46db2675757ec201a213cbf532b6827bd8f7a287a93eb0a1f3dcd84c208985b3" + ], + "returns": {}, + "timestamp": 1689775171, + "chain": 10, + "multi": false, + "commit": "8f0f478" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10/run-1689775178.json b/broadcast/DeployKernel.s.sol/10/run-1689775178.json new file mode 100644 index 00000000..e5b42c74 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10/run-1689775178.json @@ -0,0 +1,146 @@ +{ + "transactions": [ + { + "hash": "0x9eabb670d04f8c9f127cba04f297f397c223b46fefca06efbea38edcb8989878", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x0a0059cb41d0fcfe629b750f97cf875ca9be1b9c752a8c0706a8544c820009e4", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x2" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x46db2675757ec201a213cbf532b6827bd8f7a287a93eb0a1f3dcd84c208985b3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x9eabb670d04f8c9f127cba04f297f397c223b46fefca06efbea38edcb8989878", + "transactionIndex": "0x8", + "blockHash": "0x19220cefb7a7bf34bbbfa616c50ed177d1eb2752c6a1d1742095933835b8a315", + "blockNumber": "0x6620946", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x5c3993", + "gasUsed": "0x3f6e5d", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x787" + }, + { + "transactionHash": "0x0a0059cb41d0fcfe629b750f97cf875ca9be1b9c752a8c0706a8544c820009e4", + "transactionIndex": "0x9", + "blockHash": "0x19220cefb7a7bf34bbbfa616c50ed177d1eb2752c6a1d1742095933835b8a315", + "blockNumber": "0x6620946", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x641eda", + "gasUsed": "0x7e547", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x787" + }, + { + "transactionHash": "0x46db2675757ec201a213cbf532b6827bd8f7a287a93eb0a1f3dcd84c208985b3", + "transactionIndex": "0xa", + "blockHash": "0x19220cefb7a7bf34bbbfa616c50ed177d1eb2752c6a1d1742095933835b8a315", + "blockNumber": "0x6620946", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x67f669", + "gasUsed": "0x3d78f", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x787" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689775178, + "chain": 10, + "multi": false, + "commit": "8f0f478" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10/run-1692128880.json b/broadcast/DeployKernel.s.sol/10/run-1692128880.json new file mode 100644 index 00000000..3d353bbb --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10/run-1692128880.json @@ -0,0 +1,79 @@ +{ + "transactions": [ + { + "hash": "0x57334f931f37d9dc5f71717631d912d9659ee3cd87925c51c3bc9031540af4a8", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8486c4ec3cd403877ab08bc986bec3042e3a8ad27aad8204a42a1b942446c0bb", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x57334f931f37d9dc5f71717631d912d9659ee3cd87925c51c3bc9031540af4a8", + "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "0x8486c4ec3cd403877ab08bc986bec3042e3a8ad27aad8204a42a1b942446c0bb" + ], + "returns": {}, + "timestamp": 1692128880, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10/run-1692128887.json b/broadcast/DeployKernel.s.sol/10/run-1692128887.json new file mode 100644 index 00000000..7214074e --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10/run-1692128887.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0x57334f931f37d9dc5f71717631d912d9659ee3cd87925c51c3bc9031540af4a8", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8486c4ec3cd403877ab08bc986bec3042e3a8ad27aad8204a42a1b942446c0bb", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x57334f931f37d9dc5f71717631d912d9659ee3cd87925c51c3bc9031540af4a8", + "transactionIndex": "0x1", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b068a", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb904875a" + }, + { + "transactionHash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionIndex": "0x2", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x255ee5", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "transactionHash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb904875a" + }, + { + "transactionHash": "0x8486c4ec3cd403877ab08bc986bec3042e3a8ad27aad8204a42a1b942446c0bb", + "transactionIndex": "0x3", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x261447", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb904875a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128887, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10/run-latest.json b/broadcast/DeployKernel.s.sol/10/run-latest.json new file mode 100644 index 00000000..7214074e --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10/run-latest.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0x57334f931f37d9dc5f71717631d912d9659ee3cd87925c51c3bc9031540af4a8", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8486c4ec3cd403877ab08bc986bec3042e3a8ad27aad8204a42a1b942446c0bb", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x57334f931f37d9dc5f71717631d912d9659ee3cd87925c51c3bc9031540af4a8", + "transactionIndex": "0x1", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b068a", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb904875a" + }, + { + "transactionHash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionIndex": "0x2", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x255ee5", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "transactionHash": "0x855251943eeaf197f2167a41c987898f9132b5c50747bba1fa690959c6d038df", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb904875a" + }, + { + "transactionHash": "0x8486c4ec3cd403877ab08bc986bec3042e3a8ad27aad8204a42a1b942446c0bb", + "transactionIndex": "0x3", + "blockHash": "0x436842280c2ad22cac65a3b0144694df66faa107cc149d310cb663a10a8d2c9d", + "blockNumber": "0x673fe5c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x261447", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb904875a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128887, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/100/run-1692129436.json b/broadcast/DeployKernel.s.sol/100/run-1692129436.json new file mode 100644 index 00000000..3919a7f3 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/100/run-1692129436.json @@ -0,0 +1,79 @@ +{ + "transactions": [ + { + "hash": "0xb8f55e56e88bc8292fa8ab3a406b5a0b1e203c0afd6c727c393e041edcd4670c", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98b313bf940ab4d8e837887168f5c603757fb92dceabdee7bee0e5b797fac1e7", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xb8f55e56e88bc8292fa8ab3a406b5a0b1e203c0afd6c727c393e041edcd4670c", + "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "0x98b313bf940ab4d8e837887168f5c603757fb92dceabdee7bee0e5b797fac1e7" + ], + "returns": {}, + "timestamp": 1692129436, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/100/run-1692129443.json b/broadcast/DeployKernel.s.sol/100/run-1692129443.json new file mode 100644 index 00000000..8e219a49 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/100/run-1692129443.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0xb8f55e56e88bc8292fa8ab3a406b5a0b1e203c0afd6c727c393e041edcd4670c", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98b313bf940ab4d8e837887168f5c603757fb92dceabdee7bee0e5b797fac1e7", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xb8f55e56e88bc8292fa8ab3a406b5a0b1e203c0afd6c727c393e041edcd4670c", + "transactionIndex": "0x0", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a5151", + "gasUsed": "0x1a5151", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + }, + { + "transactionHash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionIndex": "0x1", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x24aa64", + "gasUsed": "0xa5913", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "transactionHash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + }, + { + "transactionHash": "0x98b313bf940ab4d8e837887168f5c603757fb92dceabdee7bee0e5b797fac1e7", + "transactionIndex": "0x2", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x255fc6", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129443, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/100/run-latest.json b/broadcast/DeployKernel.s.sol/100/run-latest.json new file mode 100644 index 00000000..8e219a49 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/100/run-latest.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0xb8f55e56e88bc8292fa8ab3a406b5a0b1e203c0afd6c727c393e041edcd4670c", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98b313bf940ab4d8e837887168f5c603757fb92dceabdee7bee0e5b797fac1e7", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xb8f55e56e88bc8292fa8ab3a406b5a0b1e203c0afd6c727c393e041edcd4670c", + "transactionIndex": "0x0", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a5151", + "gasUsed": "0x1a5151", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + }, + { + "transactionHash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionIndex": "0x1", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x24aa64", + "gasUsed": "0xa5913", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "transactionHash": "0x2ae220734b0d82b0a898b326eba63b1e22566c8f0c4b5dc69486f449cf978c02", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + }, + { + "transactionHash": "0x98b313bf940ab4d8e837887168f5c603757fb92dceabdee7bee0e5b797fac1e7", + "transactionIndex": "0x2", + "blockHash": "0xf90749c0a2ee79e85c3ac2e72a3f9861cb6171517ad0894f4cb8f7d70feb5b8c", + "blockNumber": "0x1c1cb8e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x255fc6", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129443, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10200/run-1691520802.json b/broadcast/DeployKernel.s.sol/10200/run-1691520802.json new file mode 100644 index 00000000..ec8d649d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10200/run-1691520802.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x758308511db4c38ccd35766ae64ae8f785528a7f12641040e97bc38979c9b1fa", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7d8a15f80ae0b28d02740152ef8842cc87965c0edbe86d3360a0131f1c62bd02", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb48b078bdc590129e14ac8be41c09aefb61f7d9761335f138f6e7f6895493e47", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa5f470c9f62f3a4562fbd555647660ffb5b72b1e7d651759c055926a99314cf2", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x758308511db4c38ccd35766ae64ae8f785528a7f12641040e97bc38979c9b1fa", + "0x7d8a15f80ae0b28d02740152ef8842cc87965c0edbe86d3360a0131f1c62bd02", + "0xb48b078bdc590129e14ac8be41c09aefb61f7d9761335f138f6e7f6895493e47", + "0xa5f470c9f62f3a4562fbd555647660ffb5b72b1e7d651759c055926a99314cf2" + ], + "returns": {}, + "timestamp": 1691520802, + "chain": 10200, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10200/run-1691520809.json b/broadcast/DeployKernel.s.sol/10200/run-1691520809.json new file mode 100644 index 00000000..e032f5ea --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10200/run-1691520809.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x758308511db4c38ccd35766ae64ae8f785528a7f12641040e97bc38979c9b1fa", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7d8a15f80ae0b28d02740152ef8842cc87965c0edbe86d3360a0131f1c62bd02", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb48b078bdc590129e14ac8be41c09aefb61f7d9761335f138f6e7f6895493e47", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa5f470c9f62f3a4562fbd555647660ffb5b72b1e7d651759c055926a99314cf2", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x758308511db4c38ccd35766ae64ae8f785528a7f12641040e97bc38979c9b1fa", + "transactionIndex": "0x1", + "blockHash": "0x3db282e32eecbd0717ca43878389c5dcd5e61da027dcf0a8332ce693667e972e", + "blockNumber": "0x527145", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1af9bb", + "gasUsed": "0x1a96ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0x7d8a15f80ae0b28d02740152ef8842cc87965c0edbe86d3360a0131f1c62bd02", + "transactionIndex": "0x2", + "blockHash": "0x3db282e32eecbd0717ca43878389c5dcd5e61da027dcf0a8332ce693667e972e", + "blockNumber": "0x527145", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x251d7c", + "gasUsed": "0xa23c1", + "contractAddress": null, + "logs": [ + { + "address": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x3db282e32eecbd0717ca43878389c5dcd5e61da027dcf0a8332ce693667e972e", + "blockNumber": "0x527145", + "transactionHash": "0x7d8a15f80ae0b28d02740152ef8842cc87965c0edbe86d3360a0131f1c62bd02", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000200000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0xb48b078bdc590129e14ac8be41c09aefb61f7d9761335f138f6e7f6895493e47", + "transactionIndex": "0x3", + "blockHash": "0x3db282e32eecbd0717ca43878389c5dcd5e61da027dcf0a8332ce693667e972e", + "blockNumber": "0x527145", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x25d2de", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0xa5f470c9f62f3a4562fbd555647660ffb5b72b1e7d651759c055926a99314cf2", + "transactionIndex": "0x4", + "blockHash": "0x3db282e32eecbd0717ca43878389c5dcd5e61da027dcf0a8332ce693667e972e", + "blockNumber": "0x527145", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x271747", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x3db282e32eecbd0717ca43878389c5dcd5e61da027dcf0a8332ce693667e972e", + "blockNumber": "0x527145", + "transactionHash": "0xa5f470c9f62f3a4562fbd555647660ffb5b72b1e7d651759c055926a99314cf2", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520809, + "chain": 10200, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10200/run-1692074427.json b/broadcast/DeployKernel.s.sol/10200/run-1692074427.json new file mode 100644 index 00000000..e1c875b6 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10200/run-1692074427.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x398dbc7f8f8ff7b9e28c57a98450d3d4c1a89c7e5d203ff576554428cc20966f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x89ff22ee415dcf3cebe0f13c1a578a3fc0cd40dda988183515aa2ad2b9dba82c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x398dbc7f8f8ff7b9e28c57a98450d3d4c1a89c7e5d203ff576554428cc20966f", + "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "0x89ff22ee415dcf3cebe0f13c1a578a3fc0cd40dda988183515aa2ad2b9dba82c", + "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c" + ], + "returns": {}, + "timestamp": 1692074427, + "chain": 10200, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10200/run-1692074434.json b/broadcast/DeployKernel.s.sol/10200/run-1692074434.json new file mode 100644 index 00000000..938607d4 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10200/run-1692074434.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x398dbc7f8f8ff7b9e28c57a98450d3d4c1a89c7e5d203ff576554428cc20966f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x89ff22ee415dcf3cebe0f13c1a578a3fc0cd40dda988183515aa2ad2b9dba82c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x398dbc7f8f8ff7b9e28c57a98450d3d4c1a89c7e5d203ff576554428cc20966f", + "transactionIndex": "0x1", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1ab959", + "gasUsed": "0x1a5151", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionIndex": "0x2", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x25126c", + "gasUsed": "0xa5913", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "transactionHash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0x89ff22ee415dcf3cebe0f13c1a578a3fc0cd40dda988183515aa2ad2b9dba82c", + "transactionIndex": "0x3", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x25c7ce", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionIndex": "0x4", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x270c37", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "transactionHash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074434, + "chain": 10200, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/10200/run-latest.json b/broadcast/DeployKernel.s.sol/10200/run-latest.json new file mode 100644 index 00000000..938607d4 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/10200/run-latest.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x398dbc7f8f8ff7b9e28c57a98450d3d4c1a89c7e5d203ff576554428cc20966f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x89ff22ee415dcf3cebe0f13c1a578a3fc0cd40dda988183515aa2ad2b9dba82c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x398dbc7f8f8ff7b9e28c57a98450d3d4c1a89c7e5d203ff576554428cc20966f", + "transactionIndex": "0x1", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1ab959", + "gasUsed": "0x1a5151", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionIndex": "0x2", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x25126c", + "gasUsed": "0xa5913", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "transactionHash": "0xaffa8315697b2823842311d3882025d6741e4d16b5bf5b782b61afc6164c279e", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0x89ff22ee415dcf3cebe0f13c1a578a3fc0cd40dda988183515aa2ad2b9dba82c", + "transactionIndex": "0x3", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x25c7ce", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + }, + { + "transactionHash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionIndex": "0x4", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x270c37", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x843530023b4819d0ffda665548efd0a7e5ff74956c8c1a01d22c0547bce5aeaa", + "blockNumber": "0x542130", + "transactionHash": "0x36fe5bc3875e4c28ab45c12d0b1ccaa10969bdaa3275ff977933e881c4b4f57c", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074434, + "chain": 10200, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/137/run-1689775103.json b/broadcast/DeployKernel.s.sol/137/run-1689775103.json new file mode 100644 index 00000000..698ebe55 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/137/run-1689775103.json @@ -0,0 +1,101 @@ +{ + "transactions": [ + { + "hash": "0x75064fa7b55e12f7f54f76175cf75b906a25591c3544ac5890048b5bf6c51095", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x19" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xe56c3692b28b039b2f4c915f5f2a69a25b84f2f524d2e2e7cef37e5f1d4a2bcc", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x1a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xfb87295b680415be2096ab6edd218d81d9345b0d47659c9d8ee03ffc6c71384e", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1b" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x75064fa7b55e12f7f54f76175cf75b906a25591c3544ac5890048b5bf6c51095", + "0xe56c3692b28b039b2f4c915f5f2a69a25b84f2f524d2e2e7cef37e5f1d4a2bcc", + "0xfb87295b680415be2096ab6edd218d81d9345b0d47659c9d8ee03ffc6c71384e" + ], + "returns": {}, + "timestamp": 1689775103, + "chain": 137, + "multi": false, + "commit": "8f0f478" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/137/run-1689775110.json b/broadcast/DeployKernel.s.sol/137/run-1689775110.json new file mode 100644 index 00000000..42fd9830 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/137/run-1689775110.json @@ -0,0 +1,197 @@ +{ + "transactions": [ + { + "hash": "0x75064fa7b55e12f7f54f76175cf75b906a25591c3544ac5890048b5bf6c51095", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x19" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xe56c3692b28b039b2f4c915f5f2a69a25b84f2f524d2e2e7cef37e5f1d4a2bcc", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x1a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xfb87295b680415be2096ab6edd218d81d9345b0d47659c9d8ee03ffc6c71384e", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1b" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x75064fa7b55e12f7f54f76175cf75b906a25591c3544ac5890048b5bf6c51095", + "transactionIndex": "0x36", + "blockHash": "0xbbf7eae36c9bd84a51988fd7a7c7cc3f845d6906fe38821f47be3fbf4e057d46", + "blockNumber": "0x2b2b83e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0xbdaa0b", + "gasUsed": "0x3f6e5d", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x00000000000000000000000000000000000000000000000001e904f9a9a1ff80000000000000000000000000000000000000000000000017451a7931b4f48dff0000000000000000000000000000000000000000000005508352d4c416444aa0000000000000000000000000000000000000000000000017433174380b528e7f000000000000000000000000000000000000000000000550853bd9bdbfe64a20", + "blockHash": "0xbbf7eae36c9bd84a51988fd7a7c7cc3f845d6906fe38821f47be3fbf4e057d46", + "blockNumber": "0x2b2b83e", + "transactionHash": "0x75064fa7b55e12f7f54f76175cf75b906a25591c3544ac5890048b5bf6c51095", + "transactionIndex": "0x36", + "logIndex": "0xd9", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000080000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000080000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x1daefb699c" + }, + { + "transactionHash": "0xe56c3692b28b039b2f4c915f5f2a69a25b84f2f524d2e2e7cef37e5f1d4a2bcc", + "transactionIndex": "0x37", + "blockHash": "0xbbf7eae36c9bd84a51988fd7a7c7cc3f845d6906fe38821f47be3fbf4e057d46", + "blockNumber": "0x2b2b83e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0xc58f52", + "gasUsed": "0x7e547", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x000000000000000000000000000000000000000000000000003cdef3c58606800000000000000000000000000000000000000000000000173dbf9d5a1eda2853000000000000000000000000000000000000000000000550853bd9bdbfe64a200000000000000000000000000000000000000000000000173d82be66595421d30000000000000000000000000000000000000000000005508578b8b1856c50a0", + "blockHash": "0xbbf7eae36c9bd84a51988fd7a7c7cc3f845d6906fe38821f47be3fbf4e057d46", + "blockNumber": "0x2b2b83e", + "transactionHash": "0xe56c3692b28b039b2f4c915f5f2a69a25b84f2f524d2e2e7cef37e5f1d4a2bcc", + "transactionIndex": "0x37", + "logIndex": "0xda", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000080000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000080000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x1daefb699c" + }, + { + "transactionHash": "0xfb87295b680415be2096ab6edd218d81d9345b0d47659c9d8ee03ffc6c71384e", + "transactionIndex": "0x39", + "blockHash": "0xbbf7eae36c9bd84a51988fd7a7c7cc3f845d6906fe38821f47be3fbf4e057d46", + "blockNumber": "0x2b2b83e", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0xca3a5e", + "gasUsed": "0x3d78f", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x000000000000000000000000000000000000000000000000001d9eb411f292800000000000000000000000000000000000000000000000173cd53eb7ce63520f000000000000000000000000000000000000000000000550857f1727459a80200000000000000000000000000000000000000000000000173cb7a003bc70bf8f000000000000000000000000000000000000000000000550859cb5db578d12a0", + "blockHash": "0xbbf7eae36c9bd84a51988fd7a7c7cc3f845d6906fe38821f47be3fbf4e057d46", + "blockNumber": "0x2b2b83e", + "transactionHash": "0xfb87295b680415be2096ab6edd218d81d9345b0d47659c9d8ee03ffc6c71384e", + "transactionIndex": "0x39", + "logIndex": "0xdc", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000080000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000080000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x1daefb699c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689775110, + "chain": 137, + "multi": false, + "commit": "8f0f478" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/137/run-1692126883.json b/broadcast/DeployKernel.s.sol/137/run-1692126883.json new file mode 100644 index 00000000..df3b2120 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/137/run-1692126883.json @@ -0,0 +1,76 @@ +{ + "transactions": [ + { + "hash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1d" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1e" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8" + ], + "returns": {}, + "timestamp": 1692126883, + "chain": 137, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/137/run-1692126890.json b/broadcast/DeployKernel.s.sol/137/run-1692126890.json new file mode 100644 index 00000000..a0a7a350 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/137/run-1692126890.json @@ -0,0 +1,187 @@ +{ + "transactions": [ + { + "hash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1d" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1e" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionIndex": "0x20", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x69a125", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000009ead03f7136fc6b4bdb0780b00a1c14ae5a8b6d0" + ], + "data": "0x00000000000000000000000000000000000000000000000001892035e4ba8f690000000000000000000000000000000000000000000000173c63333bad6d4feb00000000000000000000000000000000000000000000046823a4b9f19ed1e3f60000000000000000000000000000000000000000000000173ada1305c8b2c082000000000000000000000000000000000000000000000468252dda27838c735f", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionIndex": "0x20", + "logIndex": "0x81", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000040000000040000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x82898464bc" + }, + { + "transactionHash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionIndex": "0x21", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x73f980", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionIndex": "0x21", + "logIndex": "0x82", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000009ead03f7136fc6b4bdb0780b00a1c14ae5a8b6d0" + ], + "data": "0x000000000000000000000000000000000000000000000000009a9412babd4b070000000000000000000000000000000000000000000000172ef8c801ee49d97f000000000000000000000000000000000000000000000468252dda27838c735f0000000000000000000000000000000000000000000000172e5e33ef338c8e7800000000000000000000000000000000000000000000046825c86e3a3e49be66", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionIndex": "0x21", + "logIndex": "0x83", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800001000000000000000100000000000200000000020000000000000000000800000000000000000080000000000000400040000000040000000000000080000000000000000000000000080000000000201000100000000000000000000000000000000000000000000000000000004000000000000000000001400000000000000000000000000000120000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x82898464bc" + }, + { + "transactionHash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionIndex": "0x22", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x74aee2", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000009ead03f7136fc6b4bdb0780b00a1c14ae5a8b6d0" + ], + "data": "0x000000000000000000000000000000000000000000000000000a963ee3da226a00000000000000000000000000000000000000000000001729b25b299a416aab00000000000000000000000000000000000000000000046825c86e3a3e49be6600000000000000000000000000000000000000000000001729a7c4eab667484100000000000000000000000000000000000000000000046825d304792223e0d0", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionIndex": "0x22", + "logIndex": "0x84", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000040000000040000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x82898464bc" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692126890, + "chain": 137, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/137/run-latest.json b/broadcast/DeployKernel.s.sol/137/run-latest.json new file mode 100644 index 00000000..a0a7a350 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/137/run-latest.json @@ -0,0 +1,187 @@ +{ + "transactions": [ + { + "hash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1d" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1e" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionIndex": "0x20", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x69a125", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000009ead03f7136fc6b4bdb0780b00a1c14ae5a8b6d0" + ], + "data": "0x00000000000000000000000000000000000000000000000001892035e4ba8f690000000000000000000000000000000000000000000000173c63333bad6d4feb00000000000000000000000000000000000000000000046823a4b9f19ed1e3f60000000000000000000000000000000000000000000000173ada1305c8b2c082000000000000000000000000000000000000000000000468252dda27838c735f", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0x065fc8dbbdb0d0025746f8845aeee4f3e25c9af344319280ba99de537c0cc502", + "transactionIndex": "0x20", + "logIndex": "0x81", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000040000000040000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x82898464bc" + }, + { + "transactionHash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionIndex": "0x21", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x73f980", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionIndex": "0x21", + "logIndex": "0x82", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000009ead03f7136fc6b4bdb0780b00a1c14ae5a8b6d0" + ], + "data": "0x000000000000000000000000000000000000000000000000009a9412babd4b070000000000000000000000000000000000000000000000172ef8c801ee49d97f000000000000000000000000000000000000000000000468252dda27838c735f0000000000000000000000000000000000000000000000172e5e33ef338c8e7800000000000000000000000000000000000000000000046825c86e3a3e49be66", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0xaeba92f943fe6614738285d5ae544a7b07cebca33d54acfa0f0537513b237917", + "transactionIndex": "0x21", + "logIndex": "0x83", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800001000000000000000100000000000200000000020000000000000000000800000000000000000080000000000000400040000000040000000000000080000000000000000000000000080000000000201000100000000000000000000000000000000000000000000000000000004000000000000000000001400000000000000000000000000000120000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x82898464bc" + }, + { + "transactionHash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionIndex": "0x22", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x74aee2", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000009ead03f7136fc6b4bdb0780b00a1c14ae5a8b6d0" + ], + "data": "0x000000000000000000000000000000000000000000000000000a963ee3da226a00000000000000000000000000000000000000000000001729b25b299a416aab00000000000000000000000000000000000000000000046825c86e3a3e49be6600000000000000000000000000000000000000000000001729a7c4eab667484100000000000000000000000000000000000000000000046825d304792223e0d0", + "blockHash": "0xa2aa706d899ad4fad48518b8bb52b55c843dfeb8eb6c692be85711c3b28c8ff5", + "blockNumber": "0x2c333b3", + "transactionHash": "0x141924b7e3b1e601e761d6b52b103addd171e54bba1c2b550426d8091fcd8bd8", + "transactionIndex": "0x22", + "logIndex": "0x84", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000040000000040000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x82898464bc" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692126890, + "chain": 137, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/420/run-1691518086.json b/broadcast/DeployKernel.s.sol/420/run-1691518086.json new file mode 100644 index 00000000..a8f03a99 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/420/run-1691518086.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x7b6c66e3348524ea9e0b538e4ac466c28cc733b1e7f813a0cfa6498136eb0956", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x78d0844c4cc5917977e0ba2b6eba8294244907609207705b7d40b1be358f7a9e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8e29d3458e2d9679899836b01f6606e52a63f697e7c4ba94eabb6a6b2e79799a", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x30cf501835155a69c4b1e11ce8d908053faf84e121b732cddeb028ee7f661718", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x7b6c66e3348524ea9e0b538e4ac466c28cc733b1e7f813a0cfa6498136eb0956", + "0x78d0844c4cc5917977e0ba2b6eba8294244907609207705b7d40b1be358f7a9e", + "0x8e29d3458e2d9679899836b01f6606e52a63f697e7c4ba94eabb6a6b2e79799a", + "0x30cf501835155a69c4b1e11ce8d908053faf84e121b732cddeb028ee7f661718" + ], + "returns": {}, + "timestamp": 1691518086, + "chain": 420, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/420/run-1691518093.json b/broadcast/DeployKernel.s.sol/420/run-1691518093.json new file mode 100644 index 00000000..50b0a859 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/420/run-1691518093.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x7b6c66e3348524ea9e0b538e4ac466c28cc733b1e7f813a0cfa6498136eb0956", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x78d0844c4cc5917977e0ba2b6eba8294244907609207705b7d40b1be358f7a9e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8e29d3458e2d9679899836b01f6606e52a63f697e7c4ba94eabb6a6b2e79799a", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x30cf501835155a69c4b1e11ce8d908053faf84e121b732cddeb028ee7f661718", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x7b6c66e3348524ea9e0b538e4ac466c28cc733b1e7f813a0cfa6498136eb0956", + "transactionIndex": "0x1", + "blockHash": "0x1ce4c3775cc377a944f9214afa1e610c78c67263bda549b0e5e52c3936fe89f5", + "blockNumber": "0xc70d12", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b4bde", + "gasUsed": "0x1a94a9", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e34" + }, + { + "transactionHash": "0x78d0844c4cc5917977e0ba2b6eba8294244907609207705b7d40b1be358f7a9e", + "transactionIndex": "0x2", + "blockHash": "0x1ce4c3775cc377a944f9214afa1e610c78c67263bda549b0e5e52c3936fe89f5", + "blockNumber": "0xc70d12", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x256eeb", + "gasUsed": "0xa230d", + "contractAddress": null, + "logs": [ + { + "address": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x1ce4c3775cc377a944f9214afa1e610c78c67263bda549b0e5e52c3936fe89f5", + "blockNumber": "0xc70d12", + "transactionHash": "0x78d0844c4cc5917977e0ba2b6eba8294244907609207705b7d40b1be358f7a9e", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000200000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e34" + }, + { + "transactionHash": "0x8e29d3458e2d9679899836b01f6606e52a63f697e7c4ba94eabb6a6b2e79799a", + "transactionIndex": "0x3", + "blockHash": "0x1ce4c3775cc377a944f9214afa1e610c78c67263bda549b0e5e52c3936fe89f5", + "blockNumber": "0xc70d12", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x26244d", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e34" + }, + { + "transactionHash": "0x30cf501835155a69c4b1e11ce8d908053faf84e121b732cddeb028ee7f661718", + "transactionIndex": "0x4", + "blockHash": "0x1ce4c3775cc377a944f9214afa1e610c78c67263bda549b0e5e52c3936fe89f5", + "blockNumber": "0xc70d12", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x2768b6", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x1ce4c3775cc377a944f9214afa1e610c78c67263bda549b0e5e52c3936fe89f5", + "blockNumber": "0xc70d12", + "transactionHash": "0x30cf501835155a69c4b1e11ce8d908053faf84e121b732cddeb028ee7f661718", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e34" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518093, + "chain": 420, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/420/run-1692073665.json b/broadcast/DeployKernel.s.sol/420/run-1692073665.json new file mode 100644 index 00000000..e8fab37f --- /dev/null +++ b/broadcast/DeployKernel.s.sol/420/run-1692073665.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0xe8fd691147cbc247caa40366af428f2d9f5b3e9205a0a473030eec43aeec3bfd", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe936cc1816814fb8729b689d06e528f9b47450143632e8ae0ee53fc3b227a445", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xe8fd691147cbc247caa40366af428f2d9f5b3e9205a0a473030eec43aeec3bfd", + "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "0xe936cc1816814fb8729b689d06e528f9b47450143632e8ae0ee53fc3b227a445", + "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b" + ], + "returns": {}, + "timestamp": 1692073665, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/420/run-1692073672.json b/broadcast/DeployKernel.s.sol/420/run-1692073672.json new file mode 100644 index 00000000..ed9569b6 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/420/run-1692073672.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0xe8fd691147cbc247caa40366af428f2d9f5b3e9205a0a473030eec43aeec3bfd", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe936cc1816814fb8729b689d06e528f9b47450143632e8ae0ee53fc3b227a445", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe8fd691147cbc247caa40366af428f2d9f5b3e9205a0a473030eec43aeec3bfd", + "transactionIndex": "0x1", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b0666", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionIndex": "0x2", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x255ec1", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "transactionHash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0xe936cc1816814fb8729b689d06e528f9b47450143632e8ae0ee53fc3b227a445", + "transactionIndex": "0x3", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x261423", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionIndex": "0x4", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x27588c", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "transactionHash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073672, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/420/run-latest.json b/broadcast/DeployKernel.s.sol/420/run-latest.json new file mode 100644 index 00000000..ed9569b6 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/420/run-latest.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0xe8fd691147cbc247caa40366af428f2d9f5b3e9205a0a473030eec43aeec3bfd", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe936cc1816814fb8729b689d06e528f9b47450143632e8ae0ee53fc3b227a445", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe8fd691147cbc247caa40366af428f2d9f5b3e9205a0a473030eec43aeec3bfd", + "transactionIndex": "0x1", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b0666", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionIndex": "0x2", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x255ec1", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "transactionHash": "0xd5ddbe4660caa47a02e09ebc1a1eec6fabe1f5cbfad13051cef12c558401194f", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0xe936cc1816814fb8729b689d06e528f9b47450143632e8ae0ee53fc3b227a445", + "transactionIndex": "0x3", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x261423", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionIndex": "0x4", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x27588c", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x6bf93962791af8c3823047e082c177e678134398c95c58015ac64bd67c392dd4", + "blockNumber": "0xcb4a2f", + "transactionHash": "0x54eaef3f8424768c6eff4b449cfb054f67500f65b556066a2b1ea4d56cd4532b", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073672, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/42161/run-1689775225.json b/broadcast/DeployKernel.s.sol/42161/run-1689775225.json new file mode 100644 index 00000000..b298386a --- /dev/null +++ b/broadcast/DeployKernel.s.sol/42161/run-1689775225.json @@ -0,0 +1,146 @@ +{ + "transactions": [ + { + "hash": "0x35be988ef20d7b2c3d5ce60fd428a3df7f28a9a2eb632443436b943b77247907", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x2e0f95b", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xecfe7d83900b6e8dde0c911bbbd07a64a28485b998be927fbe20dc9a246c0af2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x79237e", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xa389bc1915140b56b3bb51321d39ab6c70821a8a7e648d0eecb5e80757696048", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x48783b", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x8" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x35be988ef20d7b2c3d5ce60fd428a3df7f28a9a2eb632443436b943b77247907", + "transactionIndex": "0x3", + "blockHash": "0x85eae4d51e47387d9a033d205a3f3bc49edeb92822c73e872e599630966f79c1", + "blockNumber": "0x6b97ab8", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x21ffa48", + "gasUsed": "0x2024944", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xecfe7d83900b6e8dde0c911bbbd07a64a28485b998be927fbe20dc9a246c0af2", + "transactionIndex": "0x3", + "blockHash": "0x3ef3416c8cb57caf4c5bf4d9c40107b60ec3edff35c00ee636ad1a2ccbae383d", + "blockNumber": "0x6b97adb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x6a3bf2", + "gasUsed": "0x52ef19", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xa389bc1915140b56b3bb51321d39ab6c70821a8a7e648d0eecb5e80757696048", + "transactionIndex": "0x3", + "blockHash": "0x3bc7239d0b5f2097b1e94be8c6f3eb147c6723e732280f60a069902c8e41873e", + "blockNumber": "0x6b97ae3", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x4c9cd7", + "gasUsed": "0x309889", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689775225, + "chain": 42161, + "multi": false, + "commit": "8f0f478" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/42161/run-1692128723.json b/broadcast/DeployKernel.s.sol/42161/run-1692128723.json new file mode 100644 index 00000000..f1628526 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/42161/run-1692128723.json @@ -0,0 +1,137 @@ +{ + "transactions": [ + { + "hash": "0xe2424c6761fcda5b23b16a4ff313daf88b0608dfc81c0214afde05e3631e1e90", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x4000fe8", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xa" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdc255dade91c999097a8339cf7d4da3be827a2f62a48e12fd54165d507aefe1b", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1c4d384", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdac570fea6789cb52b99ec2a4f85ef10873cff87113b59c5a297e57a511a3c0f", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x2a1377", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe2424c6761fcda5b23b16a4ff313daf88b0608dfc81c0214afde05e3631e1e90", + "transactionIndex": "0x1", + "blockHash": "0xc52004ed12850b11eed88216a2231e23408551f15dfc1bfc0c093f88d28c2187", + "blockNumber": "0x7417037", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2c2f701", + "gasUsed": "0x2c2f701", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xdc255dade91c999097a8339cf7d4da3be827a2f62a48e12fd54165d507aefe1b", + "transactionIndex": "0x1", + "blockHash": "0x719862c188c3862f95be81ffb88960dd333d60f31b484e158b95f6e4ef046388", + "blockNumber": "0x741703f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x13691c8", + "gasUsed": "0x13691c8", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x719862c188c3862f95be81ffb88960dd333d60f31b484e158b95f6e4ef046388", + "blockNumber": "0x741703f", + "transactionHash": "0xdc255dade91c999097a8339cf7d4da3be827a2f62a48e12fd54165d507aefe1b", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xdac570fea6789cb52b99ec2a4f85ef10873cff87113b59c5a297e57a511a3c0f", + "transactionIndex": "0x1", + "blockHash": "0x2a53fc3f4988c2bd621f3e87e4cb2781379a80bd926ef46e60e56444c02d19ec", + "blockNumber": "0x7417047", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x1927ac", + "gasUsed": "0x1927ac", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128723, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/42161/run-latest.json b/broadcast/DeployKernel.s.sol/42161/run-latest.json new file mode 100644 index 00000000..f1628526 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/42161/run-latest.json @@ -0,0 +1,137 @@ +{ + "transactions": [ + { + "hash": "0xe2424c6761fcda5b23b16a4ff313daf88b0608dfc81c0214afde05e3631e1e90", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x4000fe8", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xa" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdc255dade91c999097a8339cf7d4da3be827a2f62a48e12fd54165d507aefe1b", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1c4d384", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdac570fea6789cb52b99ec2a4f85ef10873cff87113b59c5a297e57a511a3c0f", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x2a1377", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe2424c6761fcda5b23b16a4ff313daf88b0608dfc81c0214afde05e3631e1e90", + "transactionIndex": "0x1", + "blockHash": "0xc52004ed12850b11eed88216a2231e23408551f15dfc1bfc0c093f88d28c2187", + "blockNumber": "0x7417037", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2c2f701", + "gasUsed": "0x2c2f701", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xdc255dade91c999097a8339cf7d4da3be827a2f62a48e12fd54165d507aefe1b", + "transactionIndex": "0x1", + "blockHash": "0x719862c188c3862f95be81ffb88960dd333d60f31b484e158b95f6e4ef046388", + "blockNumber": "0x741703f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x13691c8", + "gasUsed": "0x13691c8", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x719862c188c3862f95be81ffb88960dd333d60f31b484e158b95f6e4ef046388", + "blockNumber": "0x741703f", + "transactionHash": "0xdc255dade91c999097a8339cf7d4da3be827a2f62a48e12fd54165d507aefe1b", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xdac570fea6789cb52b99ec2a4f85ef10873cff87113b59c5a297e57a511a3c0f", + "transactionIndex": "0x1", + "blockHash": "0x2a53fc3f4988c2bd621f3e87e4cb2781379a80bd926ef46e60e56444c02d19ec", + "blockNumber": "0x7417047", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x1927ac", + "gasUsed": "0x1927ac", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128723, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518329.json b/broadcast/DeployKernel.s.sol/421613/run-1691518329.json new file mode 100644 index 00000000..2b248ed6 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518329.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518329, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518368.json b/broadcast/DeployKernel.s.sol/421613/run-1691518368.json new file mode 100644 index 00000000..cdc0f5b8 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518368.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518368, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518391.json b/broadcast/DeployKernel.s.sol/421613/run-1691518391.json new file mode 100644 index 00000000..593bf1ff --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518391.json @@ -0,0 +1,93 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518391, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518417.json b/broadcast/DeployKernel.s.sol/421613/run-1691518417.json new file mode 100644 index 00000000..0390ee34 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518417.json @@ -0,0 +1,93 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518417, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518464.json b/broadcast/DeployKernel.s.sol/421613/run-1691518464.json new file mode 100644 index 00000000..6dba200d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518464.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": null, + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": null, + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": null, + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": null, + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518464, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518524.json b/broadcast/DeployKernel.s.sol/421613/run-1691518524.json new file mode 100644 index 00000000..93156e1f --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518524.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518524, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518617.json b/broadcast/DeployKernel.s.sol/421613/run-1691518617.json new file mode 100644 index 00000000..84489817 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518617.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518617, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518753.json b/broadcast/DeployKernel.s.sol/421613/run-1691518753.json new file mode 100644 index 00000000..c1eea2d9 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518753.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518753, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518874.json b/broadcast/DeployKernel.s.sol/421613/run-1691518874.json new file mode 100644 index 00000000..3daad3b2 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518874.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518874, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691518988.json b/broadcast/DeployKernel.s.sol/421613/run-1691518988.json new file mode 100644 index 00000000..752f59d8 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691518988.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518988, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519086.json b/broadcast/DeployKernel.s.sol/421613/run-1691519086.json new file mode 100644 index 00000000..9ad5f0c2 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519086.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519086, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519223.json b/broadcast/DeployKernel.s.sol/421613/run-1691519223.json new file mode 100644 index 00000000..632e14e8 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519223.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519223, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519403.json b/broadcast/DeployKernel.s.sol/421613/run-1691519403.json new file mode 100644 index 00000000..30cfe4ec --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519403.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519403, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519415.json b/broadcast/DeployKernel.s.sol/421613/run-1691519415.json new file mode 100644 index 00000000..7ab3b946 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519415.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519415, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519428.json b/broadcast/DeployKernel.s.sol/421613/run-1691519428.json new file mode 100644 index 00000000..2008db1e --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519428.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519428, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519899.json b/broadcast/DeployKernel.s.sol/421613/run-1691519899.json new file mode 100644 index 00000000..8e8a11db --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519899.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519899, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519919.json b/broadcast/DeployKernel.s.sol/421613/run-1691519919.json new file mode 100644 index 00000000..7c3e2e5b --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519919.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519919, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691519935.json b/broadcast/DeployKernel.s.sol/421613/run-1691519935.json new file mode 100644 index 00000000..9caeed0a --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691519935.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691519935, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1691520179.json b/broadcast/DeployKernel.s.sol/421613/run-1691520179.json new file mode 100644 index 00000000..d180505e --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1691520179.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0xf278fddf310414c9528e8943472cddd5c5c184899d2c723ff041eeb92087a9a9", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x230bb7", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x408dfd8719fa6fbc9d02f4ec2c9704f3240b2b9f0416d854ec2b2d7c20d6add0", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xd5ae0", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x18984d32c69870fa6295c17667808fa383db21267de046102eceb8e5950d2bb0", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xecdf420dc74cb3bb1e70c771ebcc4e2adbabe71d3d757ca6830b294494143397", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf278fddf310414c9528e8943472cddd5c5c184899d2c723ff041eeb92087a9a9", + "transactionIndex": "0x1", + "blockHash": "0x088cff90920683955173731b8b2e8fb971cd2899f41f6ad228a4ee05c5fab1d1", + "blockNumber": "0x1feac3c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a94a9", + "gasUsed": "0x1a94a9", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x8d6b4c6f0" + }, + { + "transactionHash": "0x408dfd8719fa6fbc9d02f4ec2c9704f3240b2b9f0416d854ec2b2d7c20d6add0", + "transactionIndex": "0x1", + "blockHash": "0x1e5b5bd2885d86b564b3a959832b4659dbf3c1bf2af6bd0ac92717586a4808ee", + "blockNumber": "0x1feac4a", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa230d", + "gasUsed": "0xa230d", + "contractAddress": null, + "logs": [ + { + "address": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x1e5b5bd2885d86b564b3a959832b4659dbf3c1bf2af6bd0ac92717586a4808ee", + "blockNumber": "0x1feac4a", + "transactionHash": "0x408dfd8719fa6fbc9d02f4ec2c9704f3240b2b9f0416d854ec2b2d7c20d6add0", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000200000000", + "type": "0x2", + "effectiveGasPrice": "0x88b417060" + }, + { + "transactionHash": "0x18984d32c69870fa6295c17667808fa383db21267de046102eceb8e5950d2bb0", + "transactionIndex": "0x1", + "blockHash": "0x28b742fed42b1ce7e2a33fdd5c4ea49115e282fd0d80dee2ccd2f6c0de2e4a8e", + "blockNumber": "0x1feac4d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0xb562", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x886071730" + }, + { + "transactionHash": "0xecdf420dc74cb3bb1e70c771ebcc4e2adbabe71d3d757ca6830b294494143397", + "transactionIndex": "0x1", + "blockHash": "0x2c7e2365eb70c09c2ad6cbffc89af0bfc9bca976d686e4efc1176dbd69f90796", + "blockNumber": "0x1feac56", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x14469", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x2c7e2365eb70c09c2ad6cbffc89af0bfc9bca976d686e4efc1176dbd69f90796", + "blockNumber": "0x1feac56", + "transactionHash": "0xecdf420dc74cb3bb1e70c771ebcc4e2adbabe71d3d757ca6830b294494143397", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x844a655d0" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520179, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-1692072403.json b/broadcast/DeployKernel.s.sol/421613/run-1692072403.json new file mode 100644 index 00000000..6cc97267 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-1692072403.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0xbe0aa7865435f15efbe859b40daeda58a9a687a50a954ecd512bfc47113efffe", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x22b045", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8cc8507530779188dc7adff2a45384cd907cf51c719197742a7b91eca6320957", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xda130", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe7bb1817e2cca8e0707cad66c07e9cf1e160aca49e5c6f107a05b642e1a88735", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0e783c12cbf5b4d354000b6a8ba043a5fecba412bc9e2bbd9ab30549d013d7c0", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbe0aa7865435f15efbe859b40daeda58a9a687a50a954ecd512bfc47113efffe", + "transactionIndex": "0x1", + "blockHash": "0x8978287e1f55eadc4ed392246db52d3c3db6ca5135907dc93cde93a6c8d18b7c", + "blockNumber": "0x20d64c4", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a4f55", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0x8cc8507530779188dc7adff2a45384cd907cf51c719197742a7b91eca6320957", + "transactionIndex": "0x1", + "blockHash": "0x66f292140c0fbc7a525ddb0dcea944630f28c04f94cf9c377318faabe562d663", + "blockNumber": "0x20d64c7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa585b", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x66f292140c0fbc7a525ddb0dcea944630f28c04f94cf9c377318faabe562d663", + "blockNumber": "0x20d64c7", + "transactionHash": "0x8cc8507530779188dc7adff2a45384cd907cf51c719197742a7b91eca6320957", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xe7bb1817e2cca8e0707cad66c07e9cf1e160aca49e5c6f107a05b642e1a88735", + "transactionIndex": "0x1", + "blockHash": "0x9a2bf75a01812fd05d84a9624e8925fa0e9014b5238ca7643efb67e39e5ccd93", + "blockNumber": "0x20d64c9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xb562", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0x0e783c12cbf5b4d354000b6a8ba043a5fecba412bc9e2bbd9ab30549d013d7c0", + "transactionIndex": "0x1", + "blockHash": "0xe4c0793e7acf8c401d2f05c4eeb9730bac70c59cdc9c7023b3311cc9a05f9fd0", + "blockNumber": "0x20d64d4", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x14469", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xe4c0793e7acf8c401d2f05c4eeb9730bac70c59cdc9c7023b3311cc9a05f9fd0", + "blockNumber": "0x20d64d4", + "transactionHash": "0x0e783c12cbf5b4d354000b6a8ba043a5fecba412bc9e2bbd9ab30549d013d7c0", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072403, + "chain": 421613, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/421613/run-latest.json b/broadcast/DeployKernel.s.sol/421613/run-latest.json new file mode 100644 index 00000000..6cc97267 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/421613/run-latest.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0xbe0aa7865435f15efbe859b40daeda58a9a687a50a954ecd512bfc47113efffe", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x22b045", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8cc8507530779188dc7adff2a45384cd907cf51c719197742a7b91eca6320957", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xda130", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe7bb1817e2cca8e0707cad66c07e9cf1e160aca49e5c6f107a05b642e1a88735", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x6d8b", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0e783c12cbf5b4d354000b6a8ba043a5fecba412bc9e2bbd9ab30549d013d7c0", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x6bad", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbe0aa7865435f15efbe859b40daeda58a9a687a50a954ecd512bfc47113efffe", + "transactionIndex": "0x1", + "blockHash": "0x8978287e1f55eadc4ed392246db52d3c3db6ca5135907dc93cde93a6c8d18b7c", + "blockNumber": "0x20d64c4", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a4f55", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0x8cc8507530779188dc7adff2a45384cd907cf51c719197742a7b91eca6320957", + "transactionIndex": "0x1", + "blockHash": "0x66f292140c0fbc7a525ddb0dcea944630f28c04f94cf9c377318faabe562d663", + "blockNumber": "0x20d64c7", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa585b", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x66f292140c0fbc7a525ddb0dcea944630f28c04f94cf9c377318faabe562d663", + "blockNumber": "0x20d64c7", + "transactionHash": "0x8cc8507530779188dc7adff2a45384cd907cf51c719197742a7b91eca6320957", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0xe7bb1817e2cca8e0707cad66c07e9cf1e160aca49e5c6f107a05b642e1a88735", + "transactionIndex": "0x1", + "blockHash": "0x9a2bf75a01812fd05d84a9624e8925fa0e9014b5238ca7643efb67e39e5ccd93", + "blockNumber": "0x20d64c9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xb562", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + }, + { + "transactionHash": "0x0e783c12cbf5b4d354000b6a8ba043a5fecba412bc9e2bbd9ab30549d013d7c0", + "transactionIndex": "0x1", + "blockHash": "0xe4c0793e7acf8c401d2f05c4eeb9730bac70c59cdc9c7023b3311cc9a05f9fd0", + "blockNumber": "0x20d64d4", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x14469", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xe4c0793e7acf8c401d2f05c4eeb9730bac70c59cdc9c7023b3311cc9a05f9fd0", + "blockNumber": "0x20d64d4", + "transactionHash": "0x0e783c12cbf5b4d354000b6a8ba043a5fecba412bc9e2bbd9ab30549d013d7c0", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072403, + "chain": 421613, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43113/run-1691520462.json b/broadcast/DeployKernel.s.sol/43113/run-1691520462.json new file mode 100644 index 00000000..6c8202aa --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43113/run-1691520462.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520462, + "chain": 43113, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43113/run-1691520484.json b/broadcast/DeployKernel.s.sol/43113/run-1691520484.json new file mode 100644 index 00000000..b296b962 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43113/run-1691520484.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520484, + "chain": 43113, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43113/run-1691520581.json b/broadcast/DeployKernel.s.sol/43113/run-1691520581.json new file mode 100644 index 00000000..ada7a51d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43113/run-1691520581.json @@ -0,0 +1,100 @@ +{ + "transactions": [ + { + "hash": "0xd0b1ffa7799070e830d79d01c8b2735ccdb69ac52ab7bab244ced7493799f3ba", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x18bc42e511afc2bed20c0a346eb354420ef3d67a27e1e9646388f88afe9d031c", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xd0b1ffa7799070e830d79d01c8b2735ccdb69ac52ab7bab244ced7493799f3ba", + "0x18bc42e511afc2bed20c0a346eb354420ef3d67a27e1e9646388f88afe9d031c" + ], + "returns": {}, + "timestamp": 1691520581, + "chain": 43113, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43113/run-1692072581.json b/broadcast/DeployKernel.s.sol/43113/run-1692072581.json new file mode 100644 index 00000000..61203e4e --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43113/run-1692072581.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x11efa6bf149e64554e222ca7c8aa98fd45313a7d8be419c37941a695306446b0", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7b26345d0745ec879181d646e7e0a4648eb255589d21163b5c1ad5e3658aba8f", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x11efa6bf149e64554e222ca7c8aa98fd45313a7d8be419c37941a695306446b0", + "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "0x7b26345d0745ec879181d646e7e0a4648eb255589d21163b5c1ad5e3658aba8f", + "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c" + ], + "returns": {}, + "timestamp": 1692072581, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43113/run-1692072594.json b/broadcast/DeployKernel.s.sol/43113/run-1692072594.json new file mode 100644 index 00000000..a5376240 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43113/run-1692072594.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x11efa6bf149e64554e222ca7c8aa98fd45313a7d8be419c37941a695306446b0", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7b26345d0745ec879181d646e7e0a4648eb255589d21163b5c1ad5e3658aba8f", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x11efa6bf149e64554e222ca7c8aa98fd45313a7d8be419c37941a695306446b0", + "transactionIndex": "0x0", + "blockHash": "0xc02149fc6e41910dd401cf1ac2f6e5a489618ebea1e0cadc75935751da75fd83", + "blockNumber": "0x17d9e42", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a4f55", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionIndex": "0x0", + "blockHash": "0xfd6662ea4c0d75991c0c9b67a94b02ff8251297d85ae24106c2af0f39e0cfd09", + "blockNumber": "0x17d9e43", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa585b", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xfd6662ea4c0d75991c0c9b67a94b02ff8251297d85ae24106c2af0f39e0cfd09", + "blockNumber": "0x17d9e43", + "transactionHash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0x7b26345d0745ec879181d646e7e0a4648eb255589d21163b5c1ad5e3658aba8f", + "transactionIndex": "0x0", + "blockHash": "0xd650eb45ade71918f453221e26839fd62e6270e4dbb83c944c93738195424619", + "blockNumber": "0x17d9e45", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xb562", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionIndex": "0x0", + "blockHash": "0x73225212c45b88e70877cf3963bff5155723dd4bfe24f37b04d04885bda90805", + "blockNumber": "0x17d9e46", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x14469", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x73225212c45b88e70877cf3963bff5155723dd4bfe24f37b04d04885bda90805", + "blockNumber": "0x17d9e46", + "transactionHash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072594, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43113/run-latest.json b/broadcast/DeployKernel.s.sol/43113/run-latest.json new file mode 100644 index 00000000..a5376240 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43113/run-latest.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x11efa6bf149e64554e222ca7c8aa98fd45313a7d8be419c37941a695306446b0", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7b26345d0745ec879181d646e7e0a4648eb255589d21163b5c1ad5e3658aba8f", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x11efa6bf149e64554e222ca7c8aa98fd45313a7d8be419c37941a695306446b0", + "transactionIndex": "0x0", + "blockHash": "0xc02149fc6e41910dd401cf1ac2f6e5a489618ebea1e0cadc75935751da75fd83", + "blockNumber": "0x17d9e42", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1a4f55", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionIndex": "0x0", + "blockHash": "0xfd6662ea4c0d75991c0c9b67a94b02ff8251297d85ae24106c2af0f39e0cfd09", + "blockNumber": "0x17d9e43", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xa585b", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xfd6662ea4c0d75991c0c9b67a94b02ff8251297d85ae24106c2af0f39e0cfd09", + "blockNumber": "0x17d9e43", + "transactionHash": "0xbca08b39206591f5fffcc645478f04710b177f852ec5bba99e7c04331cf46afd", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0x7b26345d0745ec879181d646e7e0a4648eb255589d21163b5c1ad5e3658aba8f", + "transactionIndex": "0x0", + "blockHash": "0xd650eb45ade71918f453221e26839fd62e6270e4dbb83c944c93738195424619", + "blockNumber": "0x17d9e45", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xb562", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionIndex": "0x0", + "blockHash": "0x73225212c45b88e70877cf3963bff5155723dd4bfe24f37b04d04885bda90805", + "blockNumber": "0x17d9e46", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x14469", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x73225212c45b88e70877cf3963bff5155723dd4bfe24f37b04d04885bda90805", + "blockNumber": "0x17d9e46", + "transactionHash": "0xe9bf21a02bbbeeab86ff46b72c63b0380efe292c655a0fd5e152794a32bcd36c", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072594, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43114/run-1692129024.json b/broadcast/DeployKernel.s.sol/43114/run-1692129024.json new file mode 100644 index 00000000..111cb4e2 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43114/run-1692129024.json @@ -0,0 +1,79 @@ +{ + "transactions": [ + { + "hash": "0xf7658b9b8dc4ae3c724431516ca8299fbf6bda35ad6a6996ec199614afcab9ae", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdabf6b162679564cd5489dce9bdb0434cccdf37d8bbda75205753e351d3229e6", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xf7658b9b8dc4ae3c724431516ca8299fbf6bda35ad6a6996ec199614afcab9ae", + "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "0xdabf6b162679564cd5489dce9bdb0434cccdf37d8bbda75205753e351d3229e6" + ], + "returns": {}, + "timestamp": 1692129024, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43114/run-1692129038.json b/broadcast/DeployKernel.s.sol/43114/run-1692129038.json new file mode 100644 index 00000000..57c3bc8a --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43114/run-1692129038.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0xf7658b9b8dc4ae3c724431516ca8299fbf6bda35ad6a6996ec199614afcab9ae", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdabf6b162679564cd5489dce9bdb0434cccdf37d8bbda75205753e351d3229e6", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf7658b9b8dc4ae3c724431516ca8299fbf6bda35ad6a6996ec199614afcab9ae", + "transactionIndex": "0x1", + "blockHash": "0x13acb2bc78167a2a64f061812499b2b151999c61461b2072611430c078fd4a79", + "blockNumber": "0x206423b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1aa15d", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionIndex": "0x5", + "blockHash": "0xcee8337b773793c88942038cfa5b7bfe1fc979a2c40230f03d07eaa1c017daa2", + "blockNumber": "0x206423c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x189b26", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xcee8337b773793c88942038cfa5b7bfe1fc979a2c40230f03d07eaa1c017daa2", + "blockNumber": "0x206423c", + "transactionHash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionIndex": "0x5", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0xdabf6b162679564cd5489dce9bdb0434cccdf37d8bbda75205753e351d3229e6", + "transactionIndex": "0x3", + "blockHash": "0x4eb847192d3b84f36729376758a447071bb6ed6d59c3f1bcb587a2b83209a2b1", + "blockNumber": "0x206423d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x5e800", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129038, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/43114/run-latest.json b/broadcast/DeployKernel.s.sol/43114/run-latest.json new file mode 100644 index 00000000..57c3bc8a --- /dev/null +++ b/broadcast/DeployKernel.s.sol/43114/run-latest.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0xf7658b9b8dc4ae3c724431516ca8299fbf6bda35ad6a6996ec199614afcab9ae", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdabf6b162679564cd5489dce9bdb0434cccdf37d8bbda75205753e351d3229e6", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf7658b9b8dc4ae3c724431516ca8299fbf6bda35ad6a6996ec199614afcab9ae", + "transactionIndex": "0x1", + "blockHash": "0x13acb2bc78167a2a64f061812499b2b151999c61461b2072611430c078fd4a79", + "blockNumber": "0x206423b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1aa15d", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionIndex": "0x5", + "blockHash": "0xcee8337b773793c88942038cfa5b7bfe1fc979a2c40230f03d07eaa1c017daa2", + "blockNumber": "0x206423c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x189b26", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xcee8337b773793c88942038cfa5b7bfe1fc979a2c40230f03d07eaa1c017daa2", + "blockNumber": "0x206423c", + "transactionHash": "0x3effbac54a2a6b67f619b4e3789bbf71cc621d382a6a71952f80268cffee4289", + "transactionIndex": "0x5", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + }, + { + "transactionHash": "0xdabf6b162679564cd5489dce9bdb0434cccdf37d8bbda75205753e351d3229e6", + "transactionIndex": "0x3", + "blockHash": "0x4eb847192d3b84f36729376758a447071bb6ed6d59c3f1bcb587a2b83209a2b1", + "blockNumber": "0x206423d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x5e800", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129038, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1686212610.json b/broadcast/DeployKernel.s.sol/5/run-1686212610.json new file mode 100644 index 00000000..6185ca62 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1686212610.json @@ -0,0 +1,104 @@ +{ + "transactions": [ + { + "hash": "0xef5ae980c7970c18929d2123a1a64d10e3f9b0babd39a8ca5f280951db7ec2b3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x5cbf01", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3c", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x5D006d3880645ec6e254E18C1F879DAC9Dd71A39", + "initCode": "60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xcc9B83cc9aF4a79663EC9E326c67B0Fd27Afd7f7", + "initCode": "61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xC69eb9FFCDD53cF035a6e3bd5b73C22a43A5dF7A", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x2854243115c66b09bd8751d1bb8007555b6666eae133138bc25ae52137f23946", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x3d", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xec326761775215f0bfc1a4f06ca926d530e03cfc02822a13f59be3105f810011", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x59e62", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3e", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xD49a72cb78C44c6bfbf0d471581B7635cF62E81e", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xef5ae980c7970c18929d2123a1a64d10e3f9b0babd39a8ca5f280951db7ec2b3", + "0x2854243115c66b09bd8751d1bb8007555b6666eae133138bc25ae52137f23946", + "0xec326761775215f0bfc1a4f06ca926d530e03cfc02822a13f59be3105f810011" + ], + "returns": {}, + "timestamp": 1686212610, + "chain": 5, + "multi": false, + "commit": "a119af4" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1686212623.json b/broadcast/DeployKernel.s.sol/5/run-1686212623.json new file mode 100644 index 00000000..fbc5b055 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1686212623.json @@ -0,0 +1,149 @@ +{ + "transactions": [ + { + "hash": "0xef5ae980c7970c18929d2123a1a64d10e3f9b0babd39a8ca5f280951db7ec2b3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x5cbf01", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3c", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x5D006d3880645ec6e254E18C1F879DAC9Dd71A39", + "initCode": "60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xcc9B83cc9aF4a79663EC9E326c67B0Fd27Afd7f7", + "initCode": "61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xC69eb9FFCDD53cF035a6e3bd5b73C22a43A5dF7A", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x2854243115c66b09bd8751d1bb8007555b6666eae133138bc25ae52137f23946", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x3d", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xec326761775215f0bfc1a4f06ca926d530e03cfc02822a13f59be3105f810011", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x59e62", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3e", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xD49a72cb78C44c6bfbf0d471581B7635cF62E81e", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xef5ae980c7970c18929d2123a1a64d10e3f9b0babd39a8ca5f280951db7ec2b3", + "transactionIndex": "0x3", + "blockHash": "0xa412f8f63a552fba07848d39c2f8da6f6faed499e5042533f1f1e2d7e93a96ab", + "blockNumber": "0x8b821f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x43f05a", + "gasUsed": "0x3f73a5", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d06126" + }, + { + "transactionHash": "0x2854243115c66b09bd8751d1bb8007555b6666eae133138bc25ae52137f23946", + "transactionIndex": "0x4", + "blockHash": "0xa412f8f63a552fba07848d39c2f8da6f6faed499e5042533f1f1e2d7e93a96ab", + "blockNumber": "0x8b821f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x4bd62b", + "gasUsed": "0x7e5d1", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d06126" + }, + { + "transactionHash": "0xec326761775215f0bfc1a4f06ca926d530e03cfc02822a13f59be3105f810011", + "transactionIndex": "0x5", + "blockHash": "0xa412f8f63a552fba07848d39c2f8da6f6faed499e5042533f1f1e2d7e93a96ab", + "blockNumber": "0x8b821f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x4fadfe", + "gasUsed": "0x3d7d3", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d06126" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1686212623, + "chain": 5, + "multi": false, + "commit": "a119af4" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1689175760.json b/broadcast/DeployKernel.s.sol/5/run-1689175760.json new file mode 100644 index 00000000..355b5e60 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1689175760.json @@ -0,0 +1,77 @@ +{ + "transactions": [ + { + "hash": "0x0d59631865490e046916ac5f783b8d26c8d412629371f969bd59987d97f4454f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3f", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xc38c17580a4315e1011e34b1e6794507f94808c116ec2b6860794edbe42d0a70", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x40", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x0d59631865490e046916ac5f783b8d26c8d412629371f969bd59987d97f4454f", + "0xc38c17580a4315e1011e34b1e6794507f94808c116ec2b6860794edbe42d0a70" + ], + "returns": {}, + "timestamp": 1689175760, + "chain": 5, + "multi": false, + "commit": "ccc01a6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1689175805.json b/broadcast/DeployKernel.s.sol/5/run-1689175805.json new file mode 100644 index 00000000..b4d53375 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1689175805.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0x0d59631865490e046916ac5f783b8d26c8d412629371f969bd59987d97f4454f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3f", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xc38c17580a4315e1011e34b1e6794507f94808c116ec2b6860794edbe42d0a70", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x40", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0d59631865490e046916ac5f783b8d26c8d412629371f969bd59987d97f4454f", + "transactionIndex": "0x9", + "blockHash": "0x1951b20bed49d1d2b3ad84d56cc44a7c2fd8b619f41d98ffedfedea537c059f0", + "blockNumber": "0x8e6cb6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0xb19848", + "gasUsed": "0x3f7777", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xbd2a328d" + }, + { + "transactionHash": "0xc38c17580a4315e1011e34b1e6794507f94808c116ec2b6860794edbe42d0a70", + "transactionIndex": "0xa", + "blockHash": "0x1951b20bed49d1d2b3ad84d56cc44a7c2fd8b619f41d98ffedfedea537c059f0", + "blockNumber": "0x8e6cb6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0xb57027", + "gasUsed": "0x3d7df", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xbd2a328d" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689175805, + "chain": 5, + "multi": false, + "commit": "ccc01a6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1691517811.json b/broadcast/DeployKernel.s.sol/5/run-1691517811.json new file mode 100644 index 00000000..fb03f4d6 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1691517811.json @@ -0,0 +1,98 @@ +{ + "transactions": [ + { + "hash": "0x35c14df2e10b2a8f063c12b703a7b8e2adc0297a63b32ea47ee79c3666e470dd", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x41" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf095a0ba95cd5ac8c588ee5663099e82b2d1703cf501ed19b066f11014038600", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x42" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x60651214dd6bb8a6ab4208bd439f119f903fd15c8a023bdd8e2435f119f7900c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x43" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf13bbbb94c48831db2c5b72ab70b0cfd537241a80a0a007bafa8947e29c3b65b", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x44" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x35c14df2e10b2a8f063c12b703a7b8e2adc0297a63b32ea47ee79c3666e470dd", + "0xf095a0ba95cd5ac8c588ee5663099e82b2d1703cf501ed19b066f11014038600", + "0x60651214dd6bb8a6ab4208bd439f119f903fd15c8a023bdd8e2435f119f7900c", + "0xf13bbbb94c48831db2c5b72ab70b0cfd537241a80a0a007bafa8947e29c3b65b" + ], + "returns": {}, + "timestamp": 1691517811, + "chain": 5, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1691517818.json b/broadcast/DeployKernel.s.sol/5/run-1691517818.json new file mode 100644 index 00000000..aeebb0f2 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1691517818.json @@ -0,0 +1,189 @@ +{ + "transactions": [ + { + "hash": "0x35c14df2e10b2a8f063c12b703a7b8e2adc0297a63b32ea47ee79c3666e470dd", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x41" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf095a0ba95cd5ac8c588ee5663099e82b2d1703cf501ed19b066f11014038600", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x42" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x60651214dd6bb8a6ab4208bd439f119f903fd15c8a023bdd8e2435f119f7900c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x43" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf13bbbb94c48831db2c5b72ab70b0cfd537241a80a0a007bafa8947e29c3b65b", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x44" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x35c14df2e10b2a8f063c12b703a7b8e2adc0297a63b32ea47ee79c3666e470dd", + "transactionIndex": "0x1b", + "blockHash": "0xc33eb9db0e935f0e2bf49c6868db608aef75f1016c3ee434074d509aa49b7c1e", + "blockNumber": "0x90b80f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x4fdc8a", + "gasUsed": "0x1a96ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x57779217" + }, + { + "transactionHash": "0xf095a0ba95cd5ac8c588ee5663099e82b2d1703cf501ed19b066f11014038600", + "transactionIndex": "0x1c", + "blockHash": "0xc33eb9db0e935f0e2bf49c6868db608aef75f1016c3ee434074d509aa49b7c1e", + "blockNumber": "0x90b80f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5a004b", + "gasUsed": "0xa23c1", + "contractAddress": null, + "logs": [ + { + "address": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xc33eb9db0e935f0e2bf49c6868db608aef75f1016c3ee434074d509aa49b7c1e", + "blockNumber": "0x90b80f", + "transactionHash": "0xf095a0ba95cd5ac8c588ee5663099e82b2d1703cf501ed19b066f11014038600", + "transactionIndex": "0x1c", + "logIndex": "0x3e", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000200000000", + "type": "0x0", + "effectiveGasPrice": "0x57779217" + }, + { + "transactionHash": "0x60651214dd6bb8a6ab4208bd439f119f903fd15c8a023bdd8e2435f119f7900c", + "transactionIndex": "0x1d", + "blockHash": "0xc33eb9db0e935f0e2bf49c6868db608aef75f1016c3ee434074d509aa49b7c1e", + "blockNumber": "0x90b80f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x5ab5ad", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x57779217" + }, + { + "transactionHash": "0xf13bbbb94c48831db2c5b72ab70b0cfd537241a80a0a007bafa8947e29c3b65b", + "transactionIndex": "0x1e", + "blockHash": "0xc33eb9db0e935f0e2bf49c6868db608aef75f1016c3ee434074d509aa49b7c1e", + "blockNumber": "0x90b80f", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x5bfa16", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc33eb9db0e935f0e2bf49c6868db608aef75f1016c3ee434074d509aa49b7c1e", + "blockNumber": "0x90b80f", + "transactionHash": "0xf13bbbb94c48831db2c5b72ab70b0cfd537241a80a0a007bafa8947e29c3b65b", + "transactionIndex": "0x1e", + "logIndex": "0x3f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x57779217" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691517818, + "chain": 5, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1692071131.json b/broadcast/DeployKernel.s.sol/5/run-1692071131.json new file mode 100644 index 00000000..06ffe136 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1692071131.json @@ -0,0 +1,98 @@ +{ + "transactions": [ + { + "hash": "0xf029079ad36d6030597258f8b6378447eac6a5f6e1a34e51ad35babf3cae9965", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x47" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x48" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5b4d16418fb3e35676ef550e24c950ca759faaf7a6f77d49e44dae779d82bdf7", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x49" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xf029079ad36d6030597258f8b6378447eac6a5f6e1a34e51ad35babf3cae9965", + "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "0x5b4d16418fb3e35676ef550e24c950ca759faaf7a6f77d49e44dae779d82bdf7", + "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4" + ], + "returns": {}, + "timestamp": 1692071131, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-1692071144.json b/broadcast/DeployKernel.s.sol/5/run-1692071144.json new file mode 100644 index 00000000..6c94043f --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-1692071144.json @@ -0,0 +1,189 @@ +{ + "transactions": [ + { + "hash": "0xf029079ad36d6030597258f8b6378447eac6a5f6e1a34e51ad35babf3cae9965", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x47" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x48" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5b4d16418fb3e35676ef550e24c950ca759faaf7a6f77d49e44dae779d82bdf7", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x49" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf029079ad36d6030597258f8b6378447eac6a5f6e1a34e51ad35babf3cae9965", + "transactionIndex": "0x27", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x77ad9a", + "gasUsed": "0x1a5151", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + }, + { + "transactionHash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionIndex": "0x28", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x8206ad", + "gasUsed": "0xa5913", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "transactionHash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionIndex": "0x28", + "logIndex": "0x74", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + }, + { + "transactionHash": "0x5b4d16418fb3e35676ef550e24c950ca759faaf7a6f77d49e44dae779d82bdf7", + "transactionIndex": "0x29", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x82bc0f", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + }, + { + "transactionHash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionIndex": "0x2a", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x840078", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "transactionHash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionIndex": "0x2a", + "logIndex": "0x75", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692071144, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/5/run-latest.json b/broadcast/DeployKernel.s.sol/5/run-latest.json new file mode 100644 index 00000000..6c94043f --- /dev/null +++ b/broadcast/DeployKernel.s.sol/5/run-latest.json @@ -0,0 +1,189 @@ +{ + "transactions": [ + { + "hash": "0xf029079ad36d6030597258f8b6378447eac6a5f6e1a34e51ad35babf3cae9965", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x47" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x48" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5b4d16418fb3e35676ef550e24c950ca759faaf7a6f77d49e44dae779d82bdf7", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x49" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x4a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf029079ad36d6030597258f8b6378447eac6a5f6e1a34e51ad35babf3cae9965", + "transactionIndex": "0x27", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x77ad9a", + "gasUsed": "0x1a5151", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + }, + { + "transactionHash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionIndex": "0x28", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x8206ad", + "gasUsed": "0xa5913", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "transactionHash": "0xa4432e7d2799d7fdf593806cdb1e6fd988f03b6438a4e6bad2271f6072481cc6", + "transactionIndex": "0x28", + "logIndex": "0x74", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + }, + { + "transactionHash": "0x5b4d16418fb3e35676ef550e24c950ca759faaf7a6f77d49e44dae779d82bdf7", + "transactionIndex": "0x29", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x82bc0f", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + }, + { + "transactionHash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionIndex": "0x2a", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x840078", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x101841c156c132480d785158404e4e54f03446c779ed81db95d6d397177dba0c", + "blockNumber": "0x91439c", + "transactionHash": "0xa02e036bc66d1090a939fa7f4f023abcdf97c47aa0dd8bb1a36b28f7d6bb53f4", + "transactionIndex": "0x2a", + "logIndex": "0x75", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692071144, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/56/run-1692288588.json b/broadcast/DeployKernel.s.sol/56/run-1692288588.json new file mode 100644 index 00000000..4a66421d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/56/run-1692288588.json @@ -0,0 +1,76 @@ +{ + "transactions": [ + { + "hash": "0x8d051f84b2a014b6c54fc68d4b710b0c817bdf03898f224f478877bc497a7b4c", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c4ae56fd8be2b7f3e581f8081d41da774f534152d0adb205a7999dd6c0e6e62", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x8d051f84b2a014b6c54fc68d4b710b0c817bdf03898f224f478877bc497a7b4c", + "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "0x5c4ae56fd8be2b7f3e581f8081d41da774f534152d0adb205a7999dd6c0e6e62" + ], + "returns": {}, + "timestamp": 1692288588, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/56/run-1692288594.json b/broadcast/DeployKernel.s.sol/56/run-1692288594.json new file mode 100644 index 00000000..99e55638 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/56/run-1692288594.json @@ -0,0 +1,137 @@ +{ + "transactions": [ + { + "hash": "0x8d051f84b2a014b6c54fc68d4b710b0c817bdf03898f224f478877bc497a7b4c", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c4ae56fd8be2b7f3e581f8081d41da774f534152d0adb205a7999dd6c0e6e62", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8d051f84b2a014b6c54fc68d4b710b0c817bdf03898f224f478877bc497a7b4c", + "transactionIndex": "0x1b", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2b9ba3", + "gasUsed": "0x1a4a41", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + }, + { + "transactionHash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionIndex": "0x1d", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x369702", + "gasUsed": "0xa4b13", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "transactionHash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionIndex": "0x1d", + "logIndex": "0x18", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + }, + { + "transactionHash": "0x5c4ae56fd8be2b7f3e581f8081d41da774f534152d0adb205a7999dd6c0e6e62", + "transactionIndex": "0x1e", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x37423c", + "gasUsed": "0xab3a", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288594, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/56/run-latest.json b/broadcast/DeployKernel.s.sol/56/run-latest.json new file mode 100644 index 00000000..99e55638 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/56/run-latest.json @@ -0,0 +1,137 @@ +{ + "transactions": [ + { + "hash": "0x8d051f84b2a014b6c54fc68d4b710b0c817bdf03898f224f478877bc497a7b4c", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c4ae56fd8be2b7f3e581f8081d41da774f534152d0adb205a7999dd6c0e6e62", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8d051f84b2a014b6c54fc68d4b710b0c817bdf03898f224f478877bc497a7b4c", + "transactionIndex": "0x1b", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2b9ba3", + "gasUsed": "0x1a4a41", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + }, + { + "transactionHash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionIndex": "0x1d", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x369702", + "gasUsed": "0xa4b13", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "transactionHash": "0x19fc1d73a3004662eb966a982efe09f8bf22a6efdf3348b2e62f5f4b32858070", + "transactionIndex": "0x1d", + "logIndex": "0x18", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + }, + { + "transactionHash": "0x5c4ae56fd8be2b7f3e581f8081d41da774f534152d0adb205a7999dd6c0e6e62", + "transactionIndex": "0x1e", + "blockHash": "0x6dffb4b08a46c0665bb019818a8843a735781c0b6db7174132d1fab47b4b608a", + "blockNumber": "0x1d80c6b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x37423c", + "gasUsed": "0xab3a", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288594, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685034687.json b/broadcast/DeployKernel.s.sol/80001/run-1685034687.json new file mode 100644 index 00000000..1894193b --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685034687.json @@ -0,0 +1,85 @@ +{ + "transactions": [ + { + "hash": "0xca28197b3c9dc28bbe28690922e7e294c509326d951cd938184b6cbbd98ab03a", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x2FaC18D2d730355f84f3d08b4843397150a96222", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x34753d", + "value": "0x0", + "data": "0x60a060405234801561001057600080fd5b5060405161312038038061312083398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b6127a48061097c83390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b6080516108956100e760003960008181604b0152818161010b0152818161021b015261026d01526108956000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063037637aa146100465780631bb12e6914610089578063296601cd1461009c575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006d6100973660046103b8565b6100af565b61006d6100aa3660046103b8565b6101bd565b600080858585856040516020016100c9949392919061044f565b6040516020818303038152906040528051906020012090506101b181604051806020016100f5906103ab565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000089898960405160240161013f939291906104a5565b60408051601f19818403018152918152602080830180516001600160e01b031663347d5e2560e21b1790529051610178939291016104f7565b60408051601f19818403018152908290526101969291602001610539565b6040516020818303038152906040528051906020012061036d565b9150505b949350505050565b600080858585856040516020016101d7949392919061044f565b604051602081830303815290604052805190602001209050600061024f8260405180602001610205906103ab565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a8a8a60405160240161013f939291906104a5565b90506001600160a01b0381163b1561026a5791506101b59050565b817f000000000000000000000000000000000000000000000000000000000000000063d1f5789460e01b8989896040516024016102a9939291906104a5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516102e6906103ab565b6102f19291906104f7565b8190604051809103906000f5905080158015610311573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f743788888860405161035b93929190610568565b60405180910390a35050949350505050565b600061037a838330610381565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061058d83390190565b600080600080606085870312156103ce57600080fd5b84356001600160a01b03811681146103e557600080fd5b9350602085013567ffffffffffffffff8082111561040257600080fd5b818701915087601f83011261041657600080fd5b81358181111561042557600080fd5b88602082850101111561043757600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906104ca908301848661047c565b95945050505050565b60005b838110156104ee5781810151838201526020016104d6565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105248160608501602087016104d3565b601f01601f1916919091016060019392505050565b6000835161054b8184602088016104d3565b83519083019061055f8183602088016104d3565b01949350505050565b60408152600061057c60408301858761047c565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xA5A7035637487A0D83F9aC6283Cb553F5AA6F0b3", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xf2f00a8b448ee1f113a047411d9c8c35779b7d35f5c5335eddec78eadb29a0cc", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0x04b6041E532E81c91f28302E90204715d3245423", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x00a1bad10995927a410e6fafc50eaa6f281787a2dd4902b41541aad34f9b872c", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0xd02669C9bA129211A615CE6829e30fe5a30793Ac", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4c1e6", + "value": "0x0", + "data": "0x60c060405234801561001057600080fd5b5060405161042f38038061042f83398101604081905261002f9161005e565b6001600160a01b039182166080521660a052610098565b6001600160a01b038116811461005b57600080fd5b50565b6000806040838503121561007157600080fd5b825161007c81610046565b602084015190925061008d81610046565b809150509250929050565b60805160a0516103586100d760003960008181608501528181610156015261024001526000818160bf01528181610121015261020b01526103586000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d253d76146100515780633a5381b5146100805780635fbfb9cf146100a7578063bc10273e146100ba575b600080fd5b61006461005f3660046102a3565b6100e1565b6040516001600160a01b03909116815260200160405180910390f35b6100647f000000000000000000000000000000000000000000000000000000000000000081565b6100646100b53660046102a3565b6101cb565b6100647f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e6990610182907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b602060405180830381865afa15801561019f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c39190610334565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061026c907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b6020604051808303816000875af115801561019f573d6000803e3d6000fd5b6001600160a01b03811681146102a057600080fd5b50565b600080604083850312156102b657600080fd5b82356102c18161028b565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561030b578681018301518582016080015282016102ef565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561034657600080fd5b81516103518161028b565b9392505050560000000000000000000000002fac18d2d730355f84f3d08b4843397150a9622200000000000000000000000004b6041e532e81c91f28302e90204715d3245423", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xca28197b3c9dc28bbe28690922e7e294c509326d951cd938184b6cbbd98ab03a", + "0xf2f00a8b448ee1f113a047411d9c8c35779b7d35f5c5335eddec78eadb29a0cc", + "0x00a1bad10995927a410e6fafc50eaa6f281787a2dd4902b41541aad34f9b872c" + ], + "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", + "returns": {}, + "timestamp": 1685034687, + "chain": 80001, + "multi": false, + "commit": "4a30d7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685034694.json b/broadcast/DeployKernel.s.sol/80001/run-1685034694.json new file mode 100644 index 00000000..46cc3005 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685034694.json @@ -0,0 +1,181 @@ +{ + "transactions": [ + { + "hash": "0xca28197b3c9dc28bbe28690922e7e294c509326d951cd938184b6cbbd98ab03a", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x2FaC18D2d730355f84f3d08b4843397150a96222", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x34753d", + "value": "0x0", + "data": "0x60a060405234801561001057600080fd5b5060405161312038038061312083398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b6127a48061097c83390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b6080516108956100e760003960008181604b0152818161010b0152818161021b015261026d01526108956000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063037637aa146100465780631bb12e6914610089578063296601cd1461009c575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006d6100973660046103b8565b6100af565b61006d6100aa3660046103b8565b6101bd565b600080858585856040516020016100c9949392919061044f565b6040516020818303038152906040528051906020012090506101b181604051806020016100f5906103ab565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000089898960405160240161013f939291906104a5565b60408051601f19818403018152918152602080830180516001600160e01b031663347d5e2560e21b1790529051610178939291016104f7565b60408051601f19818403018152908290526101969291602001610539565b6040516020818303038152906040528051906020012061036d565b9150505b949350505050565b600080858585856040516020016101d7949392919061044f565b604051602081830303815290604052805190602001209050600061024f8260405180602001610205906103ab565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a8a8a60405160240161013f939291906104a5565b90506001600160a01b0381163b1561026a5791506101b59050565b817f000000000000000000000000000000000000000000000000000000000000000063d1f5789460e01b8989896040516024016102a9939291906104a5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516102e6906103ab565b6102f19291906104f7565b8190604051809103906000f5905080158015610311573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f743788888860405161035b93929190610568565b60405180910390a35050949350505050565b600061037a838330610381565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061058d83390190565b600080600080606085870312156103ce57600080fd5b84356001600160a01b03811681146103e557600080fd5b9350602085013567ffffffffffffffff8082111561040257600080fd5b818701915087601f83011261041657600080fd5b81358181111561042557600080fd5b88602082850101111561043757600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906104ca908301848661047c565b95945050505050565b60005b838110156104ee5781810151838201526020016104d6565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105248160608501602087016104d3565b601f01601f1916919091016060019392505050565b6000835161054b8184602088016104d3565b83519083019061055f8183602088016104d3565b01949350505050565b60408152600061057c60408301858761047c565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xA5A7035637487A0D83F9aC6283Cb553F5AA6F0b3", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xf2f00a8b448ee1f113a047411d9c8c35779b7d35f5c5335eddec78eadb29a0cc", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0x04b6041E532E81c91f28302E90204715d3245423", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0xd", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x00a1bad10995927a410e6fafc50eaa6f281787a2dd4902b41541aad34f9b872c", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0xd02669C9bA129211A615CE6829e30fe5a30793Ac", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4c1e6", + "value": "0x0", + "data": "0x60c060405234801561001057600080fd5b5060405161042f38038061042f83398101604081905261002f9161005e565b6001600160a01b039182166080521660a052610098565b6001600160a01b038116811461005b57600080fd5b50565b6000806040838503121561007157600080fd5b825161007c81610046565b602084015190925061008d81610046565b809150509250929050565b60805160a0516103586100d760003960008181608501528181610156015261024001526000818160bf01528181610121015261020b01526103586000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d253d76146100515780633a5381b5146100805780635fbfb9cf146100a7578063bc10273e146100ba575b600080fd5b61006461005f3660046102a3565b6100e1565b6040516001600160a01b03909116815260200160405180910390f35b6100647f000000000000000000000000000000000000000000000000000000000000000081565b6100646100b53660046102a3565b6101cb565b6100647f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e6990610182907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b602060405180830381865afa15801561019f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c39190610334565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061026c907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b6020604051808303816000875af115801561019f573d6000803e3d6000fd5b6001600160a01b03811681146102a057600080fd5b50565b600080604083850312156102b657600080fd5b82356102c18161028b565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561030b578681018301518582016080015282016102ef565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561034657600080fd5b81516103518161028b565b9392505050560000000000000000000000002fac18d2d730355f84f3d08b4843397150a9622200000000000000000000000004b6041e532e81c91f28302e90204715d3245423", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xca28197b3c9dc28bbe28690922e7e294c509326d951cd938184b6cbbd98ab03a", + "transactionIndex": "0xa", + "blockHash": "0x220348f84be8497f38155bdbf86ece68105f96a84ff61cd92ffbc9f0c9cae066", + "blockNumber": "0x225dd87", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x546ff8", + "gasUsed": "0x285a2f", + "contractAddress": "0x2FaC18D2d730355f84f3d08b4843397150a96222", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000012ca5dd6302ee100000000000000000000000000000000000000000000000009bb487a801ee8da000000000000000000000000000000000000000000001f78474ecf7ae66cd67000000000000000000000000000000000000000000000000009a87e1ca9eeb9f9000000000000000000000000000000000000000000001f78476199d8bc9d0551", + "blockHash": "0x220348f84be8497f38155bdbf86ece68105f96a84ff61cd92ffbc9f0c9cae066", + "blockNumber": "0x225dd87", + "transactionHash": "0xca28197b3c9dc28bbe28690922e7e294c509326d951cd938184b6cbbd98ab03a", + "transactionIndex": "0xa", + "logIndex": "0x4d", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xf2f00a8b448ee1f113a047411d9c8c35779b7d35f5c5335eddec78eadb29a0cc", + "transactionIndex": "0xb", + "blockHash": "0x220348f84be8497f38155bdbf86ece68105f96a84ff61cd92ffbc9f0c9cae066", + "blockNumber": "0x225dd87", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x5be92f", + "gasUsed": "0x77937", + "contractAddress": "0x04b6041E532E81c91f28302E90204715d3245423", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x00000000000000000000000000000000000000000000000000037ae8faf7bf5900000000000000000000000000000000000000000000000009a87e1ca740bcda000000000000000000000000000000000000000000001f78476199d8bc9d055100000000000000000000000000000000000000000000000009a50333ac48fd81000000000000000000000000000000000000000000001f78476514c1b794c4aa", + "blockHash": "0x220348f84be8497f38155bdbf86ece68105f96a84ff61cd92ffbc9f0c9cae066", + "blockNumber": "0x225dd87", + "transactionHash": "0xf2f00a8b448ee1f113a047411d9c8c35779b7d35f5c5335eddec78eadb29a0cc", + "transactionIndex": "0xb", + "logIndex": "0x4e", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x00a1bad10995927a410e6fafc50eaa6f281787a2dd4902b41541aad34f9b872c", + "transactionIndex": "0xc", + "blockHash": "0x220348f84be8497f38155bdbf86ece68105f96a84ff61cd92ffbc9f0c9cae066", + "blockNumber": "0x225dd87", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x5f9208", + "gasUsed": "0x3a8d9", + "contractAddress": "0xd02669C9bA129211A615CE6829e30fe5a30793Ac", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000001b440f14c3d9700000000000000000000000000000000000000000000000009a50333abc9f0da000000000000000000000000000000000000000000001f78476514c1b794c4aa00000000000000000000000000000000000000000000000009a34ef2ba7db343000000000000000000000000000000000000000000001f784766c902a8e10241", + "blockHash": "0x220348f84be8497f38155bdbf86ece68105f96a84ff61cd92ffbc9f0c9cae066", + "blockNumber": "0x225dd87", + "transactionHash": "0x00a1bad10995927a410e6fafc50eaa6f281787a2dd4902b41541aad34f9b872c", + "transactionIndex": "0xc", + "logIndex": "0x4f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", + "returns": {}, + "timestamp": 1685034694, + "chain": 80001, + "multi": false, + "commit": "4a30d7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685034801.json b/broadcast/DeployKernel.s.sol/80001/run-1685034801.json new file mode 100644 index 00000000..8a842dc7 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685034801.json @@ -0,0 +1,85 @@ +{ + "transactions": [ + { + "hash": "0x4de7d15051f0b55f9276698f72b630a74ce4e9e05a8efee91e4ccf13885cdd99", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0xbb2Fa81a7ec2dF9F109900aEc1F26EfD516F79AA", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x34753d", + "value": "0x0", + "data": "0x60a060405234801561001057600080fd5b5060405161312038038061312083398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b6127a48061097c83390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b6080516108956100e760003960008181604b0152818161010b0152818161021b015261026d01526108956000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063037637aa146100465780631bb12e6914610089578063296601cd1461009c575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006d6100973660046103b8565b6100af565b61006d6100aa3660046103b8565b6101bd565b600080858585856040516020016100c9949392919061044f565b6040516020818303038152906040528051906020012090506101b181604051806020016100f5906103ab565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000089898960405160240161013f939291906104a5565b60408051601f19818403018152918152602080830180516001600160e01b031663347d5e2560e21b1790529051610178939291016104f7565b60408051601f19818403018152908290526101969291602001610539565b6040516020818303038152906040528051906020012061036d565b9150505b949350505050565b600080858585856040516020016101d7949392919061044f565b604051602081830303815290604052805190602001209050600061024f8260405180602001610205906103ab565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a8a8a60405160240161013f939291906104a5565b90506001600160a01b0381163b1561026a5791506101b59050565b817f000000000000000000000000000000000000000000000000000000000000000063d1f5789460e01b8989896040516024016102a9939291906104a5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516102e6906103ab565b6102f19291906104f7565b8190604051809103906000f5905080158015610311573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f743788888860405161035b93929190610568565b60405180910390a35050949350505050565b600061037a838330610381565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061058d83390190565b600080600080606085870312156103ce57600080fd5b84356001600160a01b03811681146103e557600080fd5b9350602085013567ffffffffffffffff8082111561040257600080fd5b818701915087601f83011261041657600080fd5b81358181111561042557600080fd5b88602082850101111561043757600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906104ca908301848661047c565b95945050505050565b60005b838110156104ee5781810151838201526020016104d6565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105248160608501602087016104d3565b601f01601f1916919091016060019392505050565b6000835161054b8184602088016104d3565b83519083019061055f8183602088016104d3565b01949350505050565b60408152600061057c60408301858761047c565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xf", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xB2ACd56A7dDBe30aE327BADEe7e5B76F6027dF10", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x295ad534cc4cd86787f3adea7c7da526731c08f8cd22112138bb772745569c51", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0xf585511520094B0F0f17977811ca8DCC21c967F8", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x10", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x33cc3485b2544ae9f85999ed20da2a0ce82ea31fe6ff032b8a00747ee542bada", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0xd0825067640fdebeeefF0e1696970143CCC5BD65", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4c1d7", + "value": "0x0", + "data": "0x60c060405234801561001057600080fd5b5060405161042f38038061042f83398101604081905261002f9161005e565b6001600160a01b039182166080521660a052610098565b6001600160a01b038116811461005b57600080fd5b50565b6000806040838503121561007157600080fd5b825161007c81610046565b602084015190925061008d81610046565b809150509250929050565b60805160a0516103586100d760003960008181608501528181610156015261024001526000818160bf01528181610121015261020b01526103586000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d253d76146100515780633a5381b5146100805780635fbfb9cf146100a7578063bc10273e146100ba575b600080fd5b61006461005f3660046102a3565b6100e1565b6040516001600160a01b03909116815260200160405180910390f35b6100647f000000000000000000000000000000000000000000000000000000000000000081565b6100646100b53660046102a3565b6101cb565b6100647f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e6990610182907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b602060405180830381865afa15801561019f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c39190610334565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061026c907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b6020604051808303816000875af115801561019f573d6000803e3d6000fd5b6001600160a01b03811681146102a057600080fd5b50565b600080604083850312156102b657600080fd5b82356102c18161028b565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561030b578681018301518582016080015282016102ef565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561034657600080fd5b81516103518161028b565b939250505056000000000000000000000000bb2fa81a7ec2df9f109900aec1f26efd516f79aa000000000000000000000000f585511520094b0f0f17977811ca8dcc21c967f8", + "nonce": "0x11", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x4de7d15051f0b55f9276698f72b630a74ce4e9e05a8efee91e4ccf13885cdd99", + "0x295ad534cc4cd86787f3adea7c7da526731c08f8cd22112138bb772745569c51", + "0x33cc3485b2544ae9f85999ed20da2a0ce82ea31fe6ff032b8a00747ee542bada" + ], + "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", + "returns": {}, + "timestamp": 1685034801, + "chain": 80001, + "multi": false, + "commit": "4a30d7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685034808.json b/broadcast/DeployKernel.s.sol/80001/run-1685034808.json new file mode 100644 index 00000000..9fc19a64 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685034808.json @@ -0,0 +1,181 @@ +{ + "transactions": [ + { + "hash": "0x4de7d15051f0b55f9276698f72b630a74ce4e9e05a8efee91e4ccf13885cdd99", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0xbb2Fa81a7ec2dF9F109900aEc1F26EfD516F79AA", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x34753d", + "value": "0x0", + "data": "0x60a060405234801561001057600080fd5b5060405161312038038061312083398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b6127a48061097c83390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b6080516108956100e760003960008181604b0152818161010b0152818161021b015261026d01526108956000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063037637aa146100465780631bb12e6914610089578063296601cd1461009c575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006d6100973660046103b8565b6100af565b61006d6100aa3660046103b8565b6101bd565b600080858585856040516020016100c9949392919061044f565b6040516020818303038152906040528051906020012090506101b181604051806020016100f5906103ab565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000089898960405160240161013f939291906104a5565b60408051601f19818403018152918152602080830180516001600160e01b031663347d5e2560e21b1790529051610178939291016104f7565b60408051601f19818403018152908290526101969291602001610539565b6040516020818303038152906040528051906020012061036d565b9150505b949350505050565b600080858585856040516020016101d7949392919061044f565b604051602081830303815290604052805190602001209050600061024f8260405180602001610205906103ab565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a8a8a60405160240161013f939291906104a5565b90506001600160a01b0381163b1561026a5791506101b59050565b817f000000000000000000000000000000000000000000000000000000000000000063d1f5789460e01b8989896040516024016102a9939291906104a5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516102e6906103ab565b6102f19291906104f7565b8190604051809103906000f5905080158015610311573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f743788888860405161035b93929190610568565b60405180910390a35050949350505050565b600061037a838330610381565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061058d83390190565b600080600080606085870312156103ce57600080fd5b84356001600160a01b03811681146103e557600080fd5b9350602085013567ffffffffffffffff8082111561040257600080fd5b818701915087601f83011261041657600080fd5b81358181111561042557600080fd5b88602082850101111561043757600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906104ca908301848661047c565b95945050505050565b60005b838110156104ee5781810151838201526020016104d6565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105248160608501602087016104d3565b601f01601f1916919091016060019392505050565b6000835161054b8184602088016104d3565b83519083019061055f8183602088016104d3565b01949350505050565b60408152600061057c60408301858761047c565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xf", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xB2ACd56A7dDBe30aE327BADEe7e5B76F6027dF10", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x295ad534cc4cd86787f3adea7c7da526731c08f8cd22112138bb772745569c51", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0xf585511520094B0F0f17977811ca8DCC21c967F8", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x10", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x33cc3485b2544ae9f85999ed20da2a0ce82ea31fe6ff032b8a00747ee542bada", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0xd0825067640fdebeeefF0e1696970143CCC5BD65", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4c1d7", + "value": "0x0", + "data": "0x60c060405234801561001057600080fd5b5060405161042f38038061042f83398101604081905261002f9161005e565b6001600160a01b039182166080521660a052610098565b6001600160a01b038116811461005b57600080fd5b50565b6000806040838503121561007157600080fd5b825161007c81610046565b602084015190925061008d81610046565b809150509250929050565b60805160a0516103586100d760003960008181608501528181610156015261024001526000818160bf01528181610121015261020b01526103586000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d253d76146100515780633a5381b5146100805780635fbfb9cf146100a7578063bc10273e146100ba575b600080fd5b61006461005f3660046102a3565b6100e1565b6040516001600160a01b03909116815260200160405180910390f35b6100647f000000000000000000000000000000000000000000000000000000000000000081565b6100646100b53660046102a3565b6101cb565b6100647f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e6990610182907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b602060405180830381865afa15801561019f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c39190610334565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061026c907f000000000000000000000000000000000000000000000000000000000000000090859088906038016102cf565b6020604051808303816000875af115801561019f573d6000803e3d6000fd5b6001600160a01b03811681146102a057600080fd5b50565b600080604083850312156102b657600080fd5b82356102c18161028b565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561030b578681018301518582016080015282016102ef565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561034657600080fd5b81516103518161028b565b939250505056000000000000000000000000bb2fa81a7ec2df9f109900aec1f26efd516f79aa000000000000000000000000f585511520094b0f0f17977811ca8dcc21c967f8", + "nonce": "0x11", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x4de7d15051f0b55f9276698f72b630a74ce4e9e05a8efee91e4ccf13885cdd99", + "transactionIndex": "0x8", + "blockHash": "0xb4eeeca3173a4ee3b83cef92c9900b11052070a0b50342117122c113729399be", + "blockNumber": "0x225ddbd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x4bb97f", + "gasUsed": "0x285a2f", + "contractAddress": "0xbb2Fa81a7ec2dF9F109900aEc1F26EfD516F79AA", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x000000000000000000000000000000000000000000000000001c2f8cc29f44e100000000000000000000000000000000000000000000000009a34ef2ba3f7cda0000000000000000000000000000000000000000000010fd4b055cf99fa086ab00000000000000000000000000000000000000000000000009871f65f7a037f90000000000000000000000000000000000000000000010fd4b218c86623fcb8c", + "blockHash": "0xb4eeeca3173a4ee3b83cef92c9900b11052070a0b50342117122c113729399be", + "blockNumber": "0x225ddbd", + "transactionHash": "0x4de7d15051f0b55f9276698f72b630a74ce4e9e05a8efee91e4ccf13885cdd99", + "transactionIndex": "0x8", + "logIndex": "0x3a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e00" + }, + { + "transactionHash": "0x295ad534cc4cd86787f3adea7c7da526731c08f8cd22112138bb772745569c51", + "transactionIndex": "0x9", + "blockHash": "0xb4eeeca3173a4ee3b83cef92c9900b11052070a0b50342117122c113729399be", + "blockNumber": "0x225ddbd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x5332b6", + "gasUsed": "0x77937", + "contractAddress": "0xf585511520094B0F0f17977811ca8DCC21c967F8", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x0000000000000000000000000000000000000000000000000005385d78b3255900000000000000000000000000000000000000000000000009871f65f4f23ada0000000000000000000000000000000000000000000010fd4b218c86623fcb8c0000000000000000000000000000000000000000000000000981e7087c3f15810000000000000000000000000000000000000000000010fd4b26c4e3daf2f0e5", + "blockHash": "0xb4eeeca3173a4ee3b83cef92c9900b11052070a0b50342117122c113729399be", + "blockNumber": "0x225ddbd", + "transactionHash": "0x295ad534cc4cd86787f3adea7c7da526731c08f8cd22112138bb772745569c51", + "transactionIndex": "0x9", + "logIndex": "0x3b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e00" + }, + { + "transactionHash": "0x33cc3485b2544ae9f85999ed20da2a0ce82ea31fe6ff032b8a00747ee542bada", + "transactionIndex": "0xa", + "blockHash": "0xb4eeeca3173a4ee3b83cef92c9900b11052070a0b50342117122c113729399be", + "blockNumber": "0x225ddbd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x56db83", + "gasUsed": "0x3a8cd", + "contractAddress": "0xd0825067640fdebeeefF0e1696970143CCC5BD65", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x00000000000000000000000000000000000000000000000000028e59084d10630000000000000000000000000000000000000000000000000981e7087bc008da0000000000000000000000000000000000000000000010fd4b26c4e3daf2f0e5000000000000000000000000000000000000000000000000097f58af7372f8770000000000000000000000000000000000000000000010fd4b29533ce3400148", + "blockHash": "0xb4eeeca3173a4ee3b83cef92c9900b11052070a0b50342117122c113729399be", + "blockNumber": "0x225ddbd", + "transactionHash": "0x33cc3485b2544ae9f85999ed20da2a0ce82ea31fe6ff032b8a00747ee542bada", + "transactionIndex": "0xa", + "logIndex": "0x3c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e00" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", + "returns": {}, + "timestamp": 1685034808, + "chain": 80001, + "multi": false, + "commit": "4a30d7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685041894.json b/broadcast/DeployKernel.s.sol/80001/run-1685041894.json new file mode 100644 index 00000000..dd67d3a8 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685041894.json @@ -0,0 +1,133 @@ +{ + "transactions": [ + { + "hash": "0x3d8211bb5d80f6c392775cfe2b8682e6487924224adf9ddc0c0d2a2f34573869", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x535236cC4d28CCEdCe0Bd7F0De448544dB99A12d", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x39b847", + "value": "0x0", + "data": "0x60c060405234801561001057600080fd5b506040516135c73803806135c783398101604081905261002f9161009f565b8060405161003c90610092565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b039081166080521660a052600080546001600160a01b031916331790556100cf565b6127a480610e2383390190565b6000602082840312156100b157600080fd5b81516001600160a01b03811681146100c857600080fd5b9392505050565b60805160a051610d0661011d600039600081816101a6015281816102550152818161061a01526106db01526000818160aa015281816103210152818161043d01526104930152610d066000f3fe608060405260043610620000915760003560e01c80635ebaf1db11620000605780635ebaf1db146200014b578063a29a43bb146200016d578063b0d691fe1462000192578063bb9fe6bf14620001c8578063c23a5cea14620001e057600080fd5b8063037637aa14620000965780630396cb6014620000e85780631bb12e691462000101578063296601cd1462000126575b600080fd5b348015620000a357600080fd5b50620000cc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b620000ff620000f93660046200078a565b62000205565b005b3480156200010e57600080fd5b50620000cc62000120366004620007cb565b620002c0565b3480156200013357600080fd5b50620000cc62000145366004620007cb565b620003da565b3480156200015857600080fd5b50600054620000cc906001600160a01b031681565b3480156200017a57600080fd5b50620000ff6200018c3660046200085d565b6200059c565b3480156200019f57600080fd5b50620000cc7f000000000000000000000000000000000000000000000000000000000000000081565b348015620001d557600080fd5b50620000ff620005eb565b348015620001ed57600080fd5b50620000ff620001ff3660046200085d565b6200068f565b6000546001600160a01b031633146200023b5760405162461bcd60e51b815260040162000232906200087d565b60405180910390fd5b604051621cb65b60e51b815263ffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630396cb609034906024016000604051808303818588803b158015620002a357600080fd5b505af1158015620002b8573d6000803e3d6000fd5b505050505050565b60008085858585604051602001620002dc9493929190620008b4565b604051602081830303815290604052805190602001209050620003ce81604051806020016200030b906200077c565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000089898960405160240162000357939291906200090a565b60408051601f19818403018152918152602080830180516001600160e01b031663347d5e2560e21b1790529051620003929392910162000960565b60408051601f1981840301815290829052620003b29291602001620009a4565b604051602081830303815290604052805190602001206200073c565b9150505b949350505050565b60008085858585604051602001620003f69493929190620008b4565b604051602081830303815290604052805190602001209050600062000473826040518060200162000427906200077c565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a8a8a60405160240162000357939291906200090a565b90506001600160a01b0381163b1562000490579150620003d29050565b817f000000000000000000000000000000000000000000000000000000000000000063d1f5789460e01b898989604051602401620004d1939291906200090a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905162000510906200077c565b6200051d92919062000960565b8190604051809103906000f59050801580156200053e573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516200058a93929190620009d7565b60405180910390a35050949350505050565b6000546001600160a01b03163314620005c95760405162461bcd60e51b815260040162000232906200087d565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620006185760405162461bcd60e51b815260040162000232906200087d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200067457600080fd5b505af115801562000689573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314620006bc5760405162461bcd60e51b815260040162000232906200087d565b60405163611d2e7560e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156200072057600080fd5b505af115801562000735573d6000803e3d6000fd5b5050505050565b60006200074b83833062000752565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61030880620009fe83390190565b6000602082840312156200079d57600080fd5b813563ffffffff811681146200074b57600080fd5b6001600160a01b0381168114620007c857600080fd5b50565b60008060008060608587031215620007e257600080fd5b8435620007ef81620007b2565b9350602085013567ffffffffffffffff808211156200080d57600080fd5b818701915087601f8301126200082257600080fd5b8135818111156200083257600080fd5b8860208285010111156200084557600080fd5b95986020929092019750949560400135945092505050565b6000602082840312156200087057600080fd5b81356200074b81620007b2565b60208082526018908201527f4b65726e656c466163746f72793a20666f7262696464656e0000000000000000604082015260600190565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090620009319083018486620008e1565b95945050505050565b60005b83811015620009575781810151838201526020016200093d565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526200098f8160608501602087016200093a565b601f01601f1916919091016060019392505050565b60008351620009b88184602088016200093a565b835190830190620009ce8183602088016200093a565b01949350505050565b604081526000620009ed604083018587620008e1565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x12", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x8D4638C1aE859b6856cA979C3Ff4D3A646c0E4F9", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x535236cC4d28CCEdCe0Bd7F0De448544dB99A12d", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x535236cc4d28ccedce0bd7f0de448544db99a12d", + "gas": "0x1b507", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x13", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd452e01c2b11b15b29cc2f331c1e316962656aeee25eb91fca63a230dee893e9", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0x2CBa7d77c93C0d595A73e2868F8F8292FcA0cb92", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x14", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaf4c997019ae384ca32e7c74e56383df9b8c26b725303e4222c4fda8feaeb1a7", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0x6B337f4dDB17B4ba93BCdE99661aB46AEc1D2823", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x98e0b", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161087438038061087483398101604081905261002f91610076565b6001600160a01b0392831660805290821660a0521660c052600080546001600160a01b031916331790556100c3565b6001600160a01b038116811461007357600080fd5b50565b60008060006060848603121561008b57600080fd5b83516100968161005e565b60208501519093506100a78161005e565b60408501519092506100b88161005e565b809150509250925092565b60805160a05160c0516107526101226000396000818161018d01528181610265015281816104f001526105ac01526000818160f901528181610343015261042d0152600081816101d60152818161030e01526103f801526107526000f3fe6080604052600436106100915760003560e01c8063a29a43bb11610059578063a29a43bb1461015b578063b0d691fe1461017b578063bb9fe6bf146101af578063bc10273e146101c4578063c23a5cea146101f857600080fd5b80630396cb60146100965780630d253d76146100ab5780633a5381b5146100e75780635ebaf1db1461011b5780635fbfb9cf1461013b575b600080fd5b6100a96100a436600461060b565b610218565b005b3480156100b757600080fd5b506100cb6100c6366004610650565b6102ce565b6040516001600160a01b03909116815260200160405180910390f35b3480156100f357600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561012757600080fd5b506000546100cb906001600160a01b031681565b34801561014757600080fd5b506100cb610156366004610650565b6103b8565b34801561016757600080fd5b506100a961017636600461067c565b610478565b34801561018757600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101bb57600080fd5b506100a96104c4565b3480156101d057600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561020457600080fd5b506100a961021336600461067c565b610563565b6000546001600160a01b0316331461024b5760405162461bcd60e51b815260040161024290610699565b60405180910390fd5b604051621cb65b60e51b815263ffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630396cb609034906024016000604051808303818588803b1580156102b257600080fd5b505af11580156102c6573d6000803e3d6000fd5b505050505050565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e699061036f907f000000000000000000000000000000000000000000000000000000000000000090859088906038016106d0565b602060405180830381865afa15801561038c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b09190610735565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd90610459907f000000000000000000000000000000000000000000000000000000000000000090859088906038016106d0565b6020604051808303816000875af115801561038c573d6000803e3d6000fd5b6000546001600160a01b031633146104a25760405162461bcd60e51b815260040161024290610699565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104ee5760405162461bcd60e51b815260040161024290610699565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561054957600080fd5b505af115801561055d573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461058d5760405162461bcd60e51b815260040161024290610699565b60405163611d2e7560e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156105f057600080fd5b505af1158015610604573d6000803e3d6000fd5b5050505050565b60006020828403121561061d57600080fd5b813563ffffffff8116811461063157600080fd5b9392505050565b6001600160a01b038116811461064d57600080fd5b50565b6000806040838503121561066357600080fd5b823561066e81610638565b946020939093013593505050565b60006020828403121561068e57600080fd5b813561063181610638565b6020808252601d908201527f45434453414b65726e656c466163746f72793a20666f7262696464656e000000604082015260600190565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561070c578681018301518582016080015282016106f0565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561074757600080fd5b81516106318161063856000000000000000000000000535236cc4d28ccedce0bd7f0de448544db99a12d0000000000000000000000002cba7d77c93c0d595a73e2868f8f8292fca0cb920000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x15", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x6B337f4dDB17B4ba93BCdE99661aB46AEc1D2823", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x6b337f4ddb17b4ba93bcde99661ab46aec1d2823", + "gas": "0x1ce9c", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x3d8211bb5d80f6c392775cfe2b8682e6487924224adf9ddc0c0d2a2f34573869", + "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "0xd452e01c2b11b15b29cc2f331c1e316962656aeee25eb91fca63a230dee893e9", + "0xaf4c997019ae384ca32e7c74e56383df9b8c26b725303e4222c4fda8feaeb1a7", + "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778" + ], + "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", + "returns": {}, + "timestamp": 1685041894, + "chain": 80001, + "multi": false, + "commit": "4a30d7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685041901.json b/broadcast/DeployKernel.s.sol/80001/run-1685041901.json new file mode 100644 index 00000000..18ae850b --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685041901.json @@ -0,0 +1,385 @@ +{ + "transactions": [ + { + "hash": "0x3d8211bb5d80f6c392775cfe2b8682e6487924224adf9ddc0c0d2a2f34573869", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x535236cC4d28CCEdCe0Bd7F0De448544dB99A12d", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x39b847", + "value": "0x0", + "data": "0x60c060405234801561001057600080fd5b506040516135c73803806135c783398101604081905261002f9161009f565b8060405161003c90610092565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b039081166080521660a052600080546001600160a01b031916331790556100cf565b6127a480610e2383390190565b6000602082840312156100b157600080fd5b81516001600160a01b03811681146100c857600080fd5b9392505050565b60805160a051610d0661011d600039600081816101a6015281816102550152818161061a01526106db01526000818160aa015281816103210152818161043d01526104930152610d066000f3fe608060405260043610620000915760003560e01c80635ebaf1db11620000605780635ebaf1db146200014b578063a29a43bb146200016d578063b0d691fe1462000192578063bb9fe6bf14620001c8578063c23a5cea14620001e057600080fd5b8063037637aa14620000965780630396cb6014620000e85780631bb12e691462000101578063296601cd1462000126575b600080fd5b348015620000a357600080fd5b50620000cc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b620000ff620000f93660046200078a565b62000205565b005b3480156200010e57600080fd5b50620000cc62000120366004620007cb565b620002c0565b3480156200013357600080fd5b50620000cc62000145366004620007cb565b620003da565b3480156200015857600080fd5b50600054620000cc906001600160a01b031681565b3480156200017a57600080fd5b50620000ff6200018c3660046200085d565b6200059c565b3480156200019f57600080fd5b50620000cc7f000000000000000000000000000000000000000000000000000000000000000081565b348015620001d557600080fd5b50620000ff620005eb565b348015620001ed57600080fd5b50620000ff620001ff3660046200085d565b6200068f565b6000546001600160a01b031633146200023b5760405162461bcd60e51b815260040162000232906200087d565b60405180910390fd5b604051621cb65b60e51b815263ffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630396cb609034906024016000604051808303818588803b158015620002a357600080fd5b505af1158015620002b8573d6000803e3d6000fd5b505050505050565b60008085858585604051602001620002dc9493929190620008b4565b604051602081830303815290604052805190602001209050620003ce81604051806020016200030b906200077c565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000089898960405160240162000357939291906200090a565b60408051601f19818403018152918152602080830180516001600160e01b031663347d5e2560e21b1790529051620003929392910162000960565b60408051601f1981840301815290829052620003b29291602001620009a4565b604051602081830303815290604052805190602001206200073c565b9150505b949350505050565b60008085858585604051602001620003f69493929190620008b4565b604051602081830303815290604052805190602001209050600062000473826040518060200162000427906200077c565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a8a8a60405160240162000357939291906200090a565b90506001600160a01b0381163b1562000490579150620003d29050565b817f000000000000000000000000000000000000000000000000000000000000000063d1f5789460e01b898989604051602401620004d1939291906200090a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905162000510906200077c565b6200051d92919062000960565b8190604051809103906000f59050801580156200053e573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516200058a93929190620009d7565b60405180910390a35050949350505050565b6000546001600160a01b03163314620005c95760405162461bcd60e51b815260040162000232906200087d565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620006185760405162461bcd60e51b815260040162000232906200087d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200067457600080fd5b505af115801562000689573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314620006bc5760405162461bcd60e51b815260040162000232906200087d565b60405163611d2e7560e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156200072057600080fd5b505af115801562000735573d6000803e3d6000fd5b5050505050565b60006200074b83833062000752565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61030880620009fe83390190565b6000602082840312156200079d57600080fd5b813563ffffffff811681146200074b57600080fd5b6001600160a01b0381168114620007c857600080fd5b50565b60008060008060608587031215620007e257600080fd5b8435620007ef81620007b2565b9350602085013567ffffffffffffffff808211156200080d57600080fd5b818701915087601f8301126200082257600080fd5b8135818111156200083257600080fd5b8860208285010111156200084557600080fd5b95986020929092019750949560400135945092505050565b6000602082840312156200087057600080fd5b81356200074b81620007b2565b60208082526018908201527f4b65726e656c466163746f72793a20666f7262696464656e0000000000000000604082015260600190565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090620009319083018486620008e1565b95945050505050565b60005b83811015620009575781810151838201526020016200093d565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526200098f8160608501602087016200093a565b601f01601f1916919091016060019392505050565b60008351620009b88184602088016200093a565b835190830190620009ce8183602088016200093a565b01949350505050565b604081526000620009ed604083018587620008e1565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x12", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x8D4638C1aE859b6856cA979C3Ff4D3A646c0E4F9", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x535236cC4d28CCEdCe0Bd7F0De448544dB99A12d", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x535236cc4d28ccedce0bd7f0de448544db99a12d", + "gas": "0x1b507", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x13", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd452e01c2b11b15b29cc2f331c1e316962656aeee25eb91fca63a230dee893e9", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0x2CBa7d77c93C0d595A73e2868F8F8292FcA0cb92", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x14", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaf4c997019ae384ca32e7c74e56383df9b8c26b725303e4222c4fda8feaeb1a7", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0x6B337f4dDB17B4ba93BCdE99661aB46AEc1D2823", + "function": null, + "arguments": null, + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x98e0b", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161087438038061087483398101604081905261002f91610076565b6001600160a01b0392831660805290821660a0521660c052600080546001600160a01b031916331790556100c3565b6001600160a01b038116811461007357600080fd5b50565b60008060006060848603121561008b57600080fd5b83516100968161005e565b60208501519093506100a78161005e565b60408501519092506100b88161005e565b809150509250925092565b60805160a05160c0516107526101226000396000818161018d01528181610265015281816104f001526105ac01526000818160f901528181610343015261042d0152600081816101d60152818161030e01526103f801526107526000f3fe6080604052600436106100915760003560e01c8063a29a43bb11610059578063a29a43bb1461015b578063b0d691fe1461017b578063bb9fe6bf146101af578063bc10273e146101c4578063c23a5cea146101f857600080fd5b80630396cb60146100965780630d253d76146100ab5780633a5381b5146100e75780635ebaf1db1461011b5780635fbfb9cf1461013b575b600080fd5b6100a96100a436600461060b565b610218565b005b3480156100b757600080fd5b506100cb6100c6366004610650565b6102ce565b6040516001600160a01b03909116815260200160405180910390f35b3480156100f357600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561012757600080fd5b506000546100cb906001600160a01b031681565b34801561014757600080fd5b506100cb610156366004610650565b6103b8565b34801561016757600080fd5b506100a961017636600461067c565b610478565b34801561018757600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101bb57600080fd5b506100a96104c4565b3480156101d057600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561020457600080fd5b506100a961021336600461067c565b610563565b6000546001600160a01b0316331461024b5760405162461bcd60e51b815260040161024290610699565b60405180910390fd5b604051621cb65b60e51b815263ffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630396cb609034906024016000604051808303818588803b1580156102b257600080fd5b505af11580156102c6573d6000803e3d6000fd5b505050505050565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e699061036f907f000000000000000000000000000000000000000000000000000000000000000090859088906038016106d0565b602060405180830381865afa15801561038c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b09190610735565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd90610459907f000000000000000000000000000000000000000000000000000000000000000090859088906038016106d0565b6020604051808303816000875af115801561038c573d6000803e3d6000fd5b6000546001600160a01b031633146104a25760405162461bcd60e51b815260040161024290610699565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104ee5760405162461bcd60e51b815260040161024290610699565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561054957600080fd5b505af115801561055d573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461058d5760405162461bcd60e51b815260040161024290610699565b60405163611d2e7560e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156105f057600080fd5b505af1158015610604573d6000803e3d6000fd5b5050505050565b60006020828403121561061d57600080fd5b813563ffffffff8116811461063157600080fd5b9392505050565b6001600160a01b038116811461064d57600080fd5b50565b6000806040838503121561066357600080fd5b823561066e81610638565b946020939093013593505050565b60006020828403121561068e57600080fd5b813561063181610638565b6020808252601d908201527f45434453414b65726e656c466163746f72793a20666f7262696464656e000000604082015260600190565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561070c578681018301518582016080015282016106f0565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561074757600080fd5b81516106318161063856000000000000000000000000535236cc4d28ccedce0bd7f0de448544db99a12d0000000000000000000000002cba7d77c93c0d595a73e2868f8f8292fca0cb920000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x15", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x6B337f4dDB17B4ba93BCdE99661aB46AEc1D2823", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x6b337f4ddb17b4ba93bcde99661ab46aec1d2823", + "gas": "0x1ce9c", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x3d8211bb5d80f6c392775cfe2b8682e6487924224adf9ddc0c0d2a2f34573869", + "transactionIndex": "0x2", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x2e84aa", + "gasUsed": "0x2c665e", + "contractAddress": "0x535236cC4d28CCEdCe0Bd7F0De448544dB99A12d", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000014ace08bb18bc2000000000000000000000000000000000000000000000000097f58af7334c2da000000000000000000000000000000000000000000001f792630b58b9b38995c000000000000000000000000000000000000000000000000096aabcee7833718000000000000000000000000000000000000000000001f792645626c26ea251e", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0x3d8211bb5d80f6c392775cfe2b8682e6487924224adf9ddc0c0d2a2f34573869", + "transactionIndex": "0x2", + "logIndex": "0x4", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionIndex": "0x3", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x535236cC4d28CCEdCe0Bd7F0De448544dB99A12d", + "cumulativeGasUsed": "0x2fc111", + "gasUsed": "0x13c67", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000535236cc4d28ccedce0bd7f0de448544db99a12d" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000969e04d2c755eda00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000969e04d2c755ed90000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionIndex": "0x3", + "logIndex": "0x5", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000535236cc4d28ccedce0bd7f0de448544db99a12d", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000667a83d635af46777b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000667a83d635af46777c", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000535236cc4d28ccedce0bd7f0de448544db99a12d" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionIndex": "0x3", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000000935619298929000000000000000000000000000000000000000000000000096aabcee4906ada000000000000000000000000000000000000000000001f792645626c26ea251e000000000000000000000000000000000000000000000000096a1878cb66e1b1000000000000000000000000000000000000000000001f792645f5c24013ae47", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0xc96169d68912bcc44c3bf8e945c55a17b2ee24e61c6688340bdb1246a4cc8d4c", + "transactionIndex": "0x3", + "logIndex": "0x8", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000200000000020000000000000000000000000000000000000000000000000000000000000000000200100000000000108000000020000000000000000000000000000000000000000000000000800000000000000000000100000001000200000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000002000000004000000000000000000001000000000000000040000000800000108000000000000100000000000000000000000000000000000200000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xd452e01c2b11b15b29cc2f331c1e316962656aeee25eb91fca63a230dee893e9", + "transactionIndex": "0x4", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x373a48", + "gasUsed": "0x77937", + "contractAddress": "0x2CBa7d77c93C0d595A73e2868F8F8292FcA0cb92", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x00000000000000000000000000000000000000000000000000037ae8faf7bf59000000000000000000000000000000000000000000000000096a1878cb51ded9000000000000000000000000000000000000000000001f792645f5c24013ae4700000000000000000000000000000000000000000000000009669d8fd05a1f80000000000000000000000000000000000000000000001f79264970ab3b0b6da0", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0xd452e01c2b11b15b29cc2f331c1e316962656aeee25eb91fca63a230dee893e9", + "transactionIndex": "0x4", + "logIndex": "0x9", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xaf4c997019ae384ca32e7c74e56383df9b8c26b725303e4222c4fda8feaeb1a7", + "transactionIndex": "0x5", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x3e93db", + "gasUsed": "0x75993", + "contractAddress": "0x6B337f4dDB17B4ba93BCdE99661aB46AEc1D2823", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x00000000000000000000000000000000000000000000000000036c2d1fbb093d00000000000000000000000000000000000000000000000009669d8fcfdb12d9000000000000000000000000000000000000000000001f79264970ab3b0b6da000000000000000000000000000000000000000000000000009633162b020099c000000000000000000000000000000000000000000001f79264cdcd85ac676dd", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0xaf4c997019ae384ca32e7c74e56383df9b8c26b725303e4222c4fda8feaeb1a7", + "transactionIndex": "0x5", + "logIndex": "0xa", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionIndex": "0x6", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x6B337f4dDB17B4ba93BCdE99661aB46AEc1D2823", + "cumulativeGasUsed": "0x3fd02c", + "gasUsed": "0x13c51", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000006b337f4ddb17b4ba93bcde99661ab46aec1d2823" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000096259f759e4e6d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096259f759e4e6d80000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionIndex": "0x6", + "logIndex": "0xb", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000006b337f4ddb17b4ba93bcde99661ab46aec1d2823", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000667a83d635af46777c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000667a83d635af46777d", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionIndex": "0x6", + "logIndex": "0xc", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000006b337f4ddb17b4ba93bcde99661ab46aec1d2823" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionIndex": "0x6", + "logIndex": "0xd", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000000934bda8ed29f00000000000000000000000000000000000000000000000009633162afa316d9000000000000000000000000000000000000000000001f79264cdcd85ac676dd00000000000000000000000000000000000000000000000009629e16d514443a000000000000000000000000000000000000000000001f79264d70243555497c", + "blockHash": "0xd5c48b9f8148cc185a2483c411880d767d1b9d58867fe3c9da49ee425226f014", + "blockNumber": "0x225eac6", + "transactionHash": "0x8163e6a3cc6ea8ce4a264abdede7d7c01ded469e66d2a3e0e0a2786479bc8778", + "transactionIndex": "0x6", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000008000000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000080000000000000000000000000000000000004080800000000000000000000000000000000000020000000000000000000000000000080000008000201000000000000020000000000000000001000000000000000002000000004000000000000000000001000000000000000040000000800000108000000000000100000000000000000000000000000000000200000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", + "returns": {}, + "timestamp": 1685041901, + "chain": 80001, + "multi": false, + "commit": "4a30d7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685274646.json b/broadcast/DeployKernel.s.sol/80001/run-1685274646.json new file mode 100644 index 00000000..c72f9f36 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685274646.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0xa1fb360440c7b5399f3afba03839a5165ad8308525d4f7d3fe756742c8f390f2", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x8646Ba75541866a33bfd6575C18915E498d0aaF5", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x52b50b", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614df5380380614df583398101604081905261002f916100f3565b8060405161003c906100d9565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100e6565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052600080546001600160a01b03191633179055610123565b611b6280610aef83390190565b6127a48061265183390190565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b60805160a05160c05161097561017a600039600061010f01526000818160e8015281816101af015281816102e10152610355015260008181606c0152818161018d015281816102bf015261033301526109756000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063037637aa146100675780631bb12e69146100aa578063296601cd146100bd5780635ebaf1db146100d05780636c2f70fd146100e3578063b0d691fe1461010a575b600080fd5b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008e6100b836600461048f565b610131565b61008e6100cb36600461048f565b610261565b60005461008e906001600160a01b031681565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161014b9493929190610526565b604051602081830303815290604052805190602001209050610255816040518060200161017790610482565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101e3949392919061057c565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b179052905161021c939291016105d7565b60408051601f198184030181529082905261023a9291602001610619565b60405160208183030381529060405280519060200120610444565b9150505b949350505050565b6000808585858560405160200161027b9493929190610526565b604051602081830303815290604052805190602001209050600061031582604051806020016102a990610482565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101e3949392919061057c565b90506001600160a01b0381163b156103305791506102599050565b817f0000000000000000000000000000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000008989604051602401610389949392919061057c565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b179052516103bd90610482565b6103c89291906105d7565b8190604051809103906000f59050801580156103e8573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f743788888860405161043293929190610648565b60405180910390a35050949350505050565b6000610451838330610458565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061066d83390190565b600080600080606085870312156104a557600080fd5b84356001600160a01b03811681146104bc57600080fd5b9350602085013567ffffffffffffffff808211156104d957600080fd5b818701915087601f8301126104ed57600080fd5b8135818111156104fc57600080fd5b88602082850101111561050e57600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038581168252841660208201526060604082018190526000906105a99083018486610553565b9695505050505050565b60005b838110156105ce5781810151838201526020016105b6565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526106048160608501602087016105b3565b601f01601f1916919091016060019392505050565b6000835161062b8184602088016105b3565b83519083019061063f8183602088016105b3565b01949350505050565b60408152600061065c604083018587610553565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b62380380611b6283398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119a16101c160003960008181610347015261050c01526000611085015260006110d4015260006110af01526000611008015260006110320152600061105c01526119a16000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161115c565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161115c565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c29291906111e7565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061123d565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061123d565b60405180910390f35b34801561028657600080fd5b5061029a610295366004611299565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce3660046112e5565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b604051610271929190611339565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c36600461138d565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611408565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611444565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611467565b9050600061047482610a97565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b6000610589610140860186611480565b610598916004916000916114c7565b6105a1916114f1565b905060006105ae866115ee565b90506000806105c06060890189611480565b6105cf916004916000916114c7565b6105d8916114f1565b90506001600160e01b03198416600003610670576105f5886115ee565b9250610605610140890189611480565b6106139160049082906114c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a057610693610140890189611480565b6106a2916024916010916114c7565b6106ab916116fd565b60601c915036600081816106cc856106c76101408f018f611480565b610b08565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611730565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611744565b915050610842868280602001905181019061083d9190611467565b610f12565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611122565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611122565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d4919083611881565b5060006109f686630c95955660e01b8686604051602401610417929190611730565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909590945092505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610ad3575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b1d60586038898b6114c7565b610b2691611942565b905087605888610b368483611960565b92610b43939291906114c7565b909550935060008888610b57846058611960565b90610b63856078611960565b92610b70939291906114c7565b610b7991611942565b60001c90506000610c5a7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bb9939291906114c7565b610bc291611942565b60001c8d8d602490603892610bd9939291906114c7565b610be2916116fd565b60601c8b8b604051610bf59291906111e7565b604051908190038120610c3f95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fad565b90506000610cc9610c696103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c938a6078611960565b9089610ca08c6078611960565b610caa9190611960565b92610cb7939291906114c7565b60405160240161041793929190611444565b915050610d1981806020019051810190610ce39190611467565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d0a939291906114c7565b610d1391611942565b16610f12565b98508a8a84610d29876078611960565b610d339190611960565b610d3e9282906114c7565b9550955060405180608001604052808c8c600490600a92610d61939291906114c7565b610d6a91611973565b60d01c65ffffffffffff1681526020018c8c600a90601092610d8e939291906114c7565b610d9791611973565b60d01c65ffffffffffff1681526020018c8c602490603892610dbb939291906114c7565b610dc4916116fd565b60601c6001600160a01b031681526020018c8c601090602492610de9939291906114c7565b610df2916116fd565b60601c9052610dff6103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610eaa602460108c8e6114c7565b610eb3916116fd565b60013090810180546001600160a01b03191660609390931c92909217909155600301610ee0888a83611881565b50888b60588c610ef08883611960565b92610efd939291906114c7565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f35575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f5f578193505b8065ffffffffffff168365ffffffffffff161115610f7b578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fba610ffb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561105457507f000000000000000000000000000000000000000000000000000000000000000046145b1561107e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061113657607f821691505b60208210810361115657634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461117081611122565b8084870152604060018084166000811461119157600181146111ab576111d9565b60ff1985168984015283151560051b8901830195506111d9565b896000528660002060005b858110156111d15781548b82018601529083019088016111b6565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561121d57602081850181015186830182015201611201565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f860208301846111f7565b60008083601f84011261126257600080fd5b50813567ffffffffffffffff81111561127a57600080fd5b60208301915083602082850101111561129257600080fd5b9250929050565b6000806000604084860312156112ae57600080fd5b83359250602084013567ffffffffffffffff8111156112cc57600080fd5b6112d886828701611250565b9497909650939450505050565b6000806000606084860312156112fa57600080fd5b833567ffffffffffffffff81111561131157600080fd5b8401610160818703121561132457600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061135d908301846111f7565b949350505050565b6001600160a01b038116811461137a57600080fd5b50565b803561138881611365565b919050565b600080600080606085870312156113a357600080fd5b84356113ae81611365565b935060208501356113be81611365565b9250604085013567ffffffffffffffff8111156113da57600080fd5b6113e687828801611250565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf6113f2565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061145e60408301848661141b565b95945050505050565b60006020828403121561147957600080fd5b5051919050565b6000808335601e1984360301811261149757600080fd5b83018035915067ffffffffffffffff8211156114b257600080fd5b60200191503681900382131561129257600080fd5b600080858511156114d757600080fd5b838611156114e457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115195780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561155b5761155b611521565b60405290565b600082601f83011261157257600080fd5b813567ffffffffffffffff8082111561158d5761158d611521565b604051601f8301601f19908116603f011681019082821181831017156115b5576115b5611521565b816040528381528660208588010111156115ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561160157600080fd5b611609611537565b6116128361137d565b815260208301356020820152604083013567ffffffffffffffff8082111561163957600080fd5b61164536838701611561565b6040840152606085013591508082111561165e57600080fd5b61166a36838701611561565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116ba57600080fd5b6116c636828801611561565b8385015250610140915081850135818111156116e157600080fd5b6116ed36828801611561565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156115195760149490940360031b84901b1690921692915050565b60208152600061135d60208301848661141b565b6060815261175e6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117866101c08501836111f7565b91506060870151605f19808685030160c08701526117a484836111f7565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261180087876111f7565b9650808c0151955050505080868503016101a0870152505061182282826111f7565b602085019690965250505060400152919050565b601f82111561187c57600081815260208120601f850160051c8101602086101561185d5750805b601f850160051c820191505b81811015610a5b57828155600101611869565b505050565b67ffffffffffffffff83111561189957611899611521565b6118ad836118a78354611122565b83611836565b6000601f8411600181146118e157600085156118c95750838201355b600019600387901b1c1916600186901b17835561193b565b600083815260209020601f19861690835b8281101561191257868501358255602094850194600190920191016118f2565b508682101561192f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf6113f2565b6001600160d01b031981358181169160068510156115195760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1c", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xd96fC2b4Bd575eFd14D41f9b3D15F134A051E4FE", + "initCode": "61016060405234801561001157600080fd5b50604051611b62380380611b6283398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119a16101c160003960008181610347015261050c01526000611085015260006110d4015260006110af01526000611008015260006110320152600061105c01526119a16000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161115c565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161115c565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c29291906111e7565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061123d565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061123d565b60405180910390f35b34801561028657600080fd5b5061029a610295366004611299565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce3660046112e5565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b604051610271929190611339565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c36600461138d565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611408565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611444565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611467565b9050600061047482610a97565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b6000610589610140860186611480565b610598916004916000916114c7565b6105a1916114f1565b905060006105ae866115ee565b90506000806105c06060890189611480565b6105cf916004916000916114c7565b6105d8916114f1565b90506001600160e01b03198416600003610670576105f5886115ee565b9250610605610140890189611480565b6106139160049082906114c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a057610693610140890189611480565b6106a2916024916010916114c7565b6106ab916116fd565b60601c915036600081816106cc856106c76101408f018f611480565b610b08565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611730565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611744565b915050610842868280602001905181019061083d9190611467565b610f12565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611122565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611122565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d4919083611881565b5060006109f686630c95955660e01b8686604051602401610417929190611730565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909590945092505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610ad3575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b1d60586038898b6114c7565b610b2691611942565b905087605888610b368483611960565b92610b43939291906114c7565b909550935060008888610b57846058611960565b90610b63856078611960565b92610b70939291906114c7565b610b7991611942565b60001c90506000610c5a7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bb9939291906114c7565b610bc291611942565b60001c8d8d602490603892610bd9939291906114c7565b610be2916116fd565b60601c8b8b604051610bf59291906111e7565b604051908190038120610c3f95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fad565b90506000610cc9610c696103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c938a6078611960565b9089610ca08c6078611960565b610caa9190611960565b92610cb7939291906114c7565b60405160240161041793929190611444565b915050610d1981806020019051810190610ce39190611467565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d0a939291906114c7565b610d1391611942565b16610f12565b98508a8a84610d29876078611960565b610d339190611960565b610d3e9282906114c7565b9550955060405180608001604052808c8c600490600a92610d61939291906114c7565b610d6a91611973565b60d01c65ffffffffffff1681526020018c8c600a90601092610d8e939291906114c7565b610d9791611973565b60d01c65ffffffffffff1681526020018c8c602490603892610dbb939291906114c7565b610dc4916116fd565b60601c6001600160a01b031681526020018c8c601090602492610de9939291906114c7565b610df2916116fd565b60601c9052610dff6103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610eaa602460108c8e6114c7565b610eb3916116fd565b60013090810180546001600160a01b03191660609390931c92909217909155600301610ee0888a83611881565b50888b60588c610ef08883611960565b92610efd939291906114c7565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f35575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f5f578193505b8065ffffffffffff168365ffffffffffff161115610f7b578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fba610ffb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561105457507f000000000000000000000000000000000000000000000000000000000000000046145b1561107e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061113657607f821691505b60208210810361115657634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461117081611122565b8084870152604060018084166000811461119157600181146111ab576111d9565b60ff1985168984015283151560051b8901830195506111d9565b896000528660002060005b858110156111d15781548b82018601529083019088016111b6565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561121d57602081850181015186830182015201611201565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f860208301846111f7565b60008083601f84011261126257600080fd5b50813567ffffffffffffffff81111561127a57600080fd5b60208301915083602082850101111561129257600080fd5b9250929050565b6000806000604084860312156112ae57600080fd5b83359250602084013567ffffffffffffffff8111156112cc57600080fd5b6112d886828701611250565b9497909650939450505050565b6000806000606084860312156112fa57600080fd5b833567ffffffffffffffff81111561131157600080fd5b8401610160818703121561132457600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061135d908301846111f7565b949350505050565b6001600160a01b038116811461137a57600080fd5b50565b803561138881611365565b919050565b600080600080606085870312156113a357600080fd5b84356113ae81611365565b935060208501356113be81611365565b9250604085013567ffffffffffffffff8111156113da57600080fd5b6113e687828801611250565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf6113f2565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061145e60408301848661141b565b95945050505050565b60006020828403121561147957600080fd5b5051919050565b6000808335601e1984360301811261149757600080fd5b83018035915067ffffffffffffffff8211156114b257600080fd5b60200191503681900382131561129257600080fd5b600080858511156114d757600080fd5b838611156114e457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115195780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561155b5761155b611521565b60405290565b600082601f83011261157257600080fd5b813567ffffffffffffffff8082111561158d5761158d611521565b604051601f8301601f19908116603f011681019082821181831017156115b5576115b5611521565b816040528381528660208588010111156115ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561160157600080fd5b611609611537565b6116128361137d565b815260208301356020820152604083013567ffffffffffffffff8082111561163957600080fd5b61164536838701611561565b6040840152606085013591508082111561165e57600080fd5b61166a36838701611561565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116ba57600080fd5b6116c636828801611561565b8385015250610140915081850135818111156116e157600080fd5b6116ed36828801611561565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156115195760149490940360031b84901b1690921692915050565b60208152600061135d60208301848661141b565b6060815261175e6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117866101c08501836111f7565b91506060870151605f19808685030160c08701526117a484836111f7565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261180087876111f7565b9650808c0151955050505080868503016101a0870152505061182282826111f7565b602085019690965250505060400152919050565b601f82111561187c57600081815260208120601f850160051c8101602086101561185d5750805b601f850160051c820191505b81811015610a5b57828155600101611869565b505050565b67ffffffffffffffff83111561189957611899611521565b6118ad836118a78354611122565b83611836565b6000601f8411600181146118e157600085156118c95750838201355b600019600387901b1c1916600186901b17835561193b565b600083815260209020601f19861690835b8281101561191257868501358255602094850194600190920191016118f2565b508682101561192f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf6113f2565b6001600160d01b031981358181169160068510156115195760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xbd20Cab340Df38A63234e35026442F5D511dbf21", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x989c7bc39645391bf3fc10a9bb6f93687a7c47b0a06de4d55f01a778c193a271", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0xa66052E04AfF420521064dAEECC59eF4cf3A1ABD", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x1d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x95ee09aab102984b74696649f552c0e67deb3c30110162941c5dc2c68205d26b", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0x08E627ca6A0593C807091726a7fbB2887a1cB556", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4fbd6", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000008646ba75541866a33bfd6575c18915e498d0aaf5000000000000000000000000a66052e04aff420521064daeecc59ef4cf3a1abd0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1e", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xa1fb360440c7b5399f3afba03839a5165ad8308525d4f7d3fe756742c8f390f2", + "0x989c7bc39645391bf3fc10a9bb6f93687a7c47b0a06de4d55f01a778c193a271", + "0x95ee09aab102984b74696649f552c0e67deb3c30110162941c5dc2c68205d26b" + ], + "returns": {}, + "timestamp": 1685274646, + "chain": 80001, + "multi": false, + "commit": "d885223" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685274653.json b/broadcast/DeployKernel.s.sol/80001/run-1685274653.json new file mode 100644 index 00000000..33fda24b --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685274653.json @@ -0,0 +1,182 @@ +{ + "transactions": [ + { + "hash": "0xa1fb360440c7b5399f3afba03839a5165ad8308525d4f7d3fe756742c8f390f2", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x8646Ba75541866a33bfd6575C18915E498d0aaF5", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x52b50b", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614df5380380614df583398101604081905261002f916100f3565b8060405161003c906100d9565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100e6565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052600080546001600160a01b03191633179055610123565b611b6280610aef83390190565b6127a48061265183390190565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b60805160a05160c05161097561017a600039600061010f01526000818160e8015281816101af015281816102e10152610355015260008181606c0152818161018d015281816102bf015261033301526109756000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063037637aa146100675780631bb12e69146100aa578063296601cd146100bd5780635ebaf1db146100d05780636c2f70fd146100e3578063b0d691fe1461010a575b600080fd5b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008e6100b836600461048f565b610131565b61008e6100cb36600461048f565b610261565b60005461008e906001600160a01b031681565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161014b9493929190610526565b604051602081830303815290604052805190602001209050610255816040518060200161017790610482565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101e3949392919061057c565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b179052905161021c939291016105d7565b60408051601f198184030181529082905261023a9291602001610619565b60405160208183030381529060405280519060200120610444565b9150505b949350505050565b6000808585858560405160200161027b9493929190610526565b604051602081830303815290604052805190602001209050600061031582604051806020016102a990610482565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101e3949392919061057c565b90506001600160a01b0381163b156103305791506102599050565b817f0000000000000000000000000000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000008989604051602401610389949392919061057c565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b179052516103bd90610482565b6103c89291906105d7565b8190604051809103906000f59050801580156103e8573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f743788888860405161043293929190610648565b60405180910390a35050949350505050565b6000610451838330610458565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061066d83390190565b600080600080606085870312156104a557600080fd5b84356001600160a01b03811681146104bc57600080fd5b9350602085013567ffffffffffffffff808211156104d957600080fd5b818701915087601f8301126104ed57600080fd5b8135818111156104fc57600080fd5b88602082850101111561050e57600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038581168252841660208201526060604082018190526000906105a99083018486610553565b9695505050505050565b60005b838110156105ce5781810151838201526020016105b6565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526106048160608501602087016105b3565b601f01601f1916919091016060019392505050565b6000835161062b8184602088016105b3565b83519083019061063f8183602088016105b3565b01949350505050565b60408152600061065c604083018587610553565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b62380380611b6283398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119a16101c160003960008181610347015261050c01526000611085015260006110d4015260006110af01526000611008015260006110320152600061105c01526119a16000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161115c565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161115c565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c29291906111e7565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061123d565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061123d565b60405180910390f35b34801561028657600080fd5b5061029a610295366004611299565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce3660046112e5565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b604051610271929190611339565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c36600461138d565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611408565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611444565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611467565b9050600061047482610a97565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b6000610589610140860186611480565b610598916004916000916114c7565b6105a1916114f1565b905060006105ae866115ee565b90506000806105c06060890189611480565b6105cf916004916000916114c7565b6105d8916114f1565b90506001600160e01b03198416600003610670576105f5886115ee565b9250610605610140890189611480565b6106139160049082906114c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a057610693610140890189611480565b6106a2916024916010916114c7565b6106ab916116fd565b60601c915036600081816106cc856106c76101408f018f611480565b610b08565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611730565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611744565b915050610842868280602001905181019061083d9190611467565b610f12565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611122565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611122565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d4919083611881565b5060006109f686630c95955660e01b8686604051602401610417929190611730565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909590945092505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610ad3575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b1d60586038898b6114c7565b610b2691611942565b905087605888610b368483611960565b92610b43939291906114c7565b909550935060008888610b57846058611960565b90610b63856078611960565b92610b70939291906114c7565b610b7991611942565b60001c90506000610c5a7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bb9939291906114c7565b610bc291611942565b60001c8d8d602490603892610bd9939291906114c7565b610be2916116fd565b60601c8b8b604051610bf59291906111e7565b604051908190038120610c3f95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fad565b90506000610cc9610c696103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c938a6078611960565b9089610ca08c6078611960565b610caa9190611960565b92610cb7939291906114c7565b60405160240161041793929190611444565b915050610d1981806020019051810190610ce39190611467565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d0a939291906114c7565b610d1391611942565b16610f12565b98508a8a84610d29876078611960565b610d339190611960565b610d3e9282906114c7565b9550955060405180608001604052808c8c600490600a92610d61939291906114c7565b610d6a91611973565b60d01c65ffffffffffff1681526020018c8c600a90601092610d8e939291906114c7565b610d9791611973565b60d01c65ffffffffffff1681526020018c8c602490603892610dbb939291906114c7565b610dc4916116fd565b60601c6001600160a01b031681526020018c8c601090602492610de9939291906114c7565b610df2916116fd565b60601c9052610dff6103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610eaa602460108c8e6114c7565b610eb3916116fd565b60013090810180546001600160a01b03191660609390931c92909217909155600301610ee0888a83611881565b50888b60588c610ef08883611960565b92610efd939291906114c7565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f35575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f5f578193505b8065ffffffffffff168365ffffffffffff161115610f7b578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fba610ffb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561105457507f000000000000000000000000000000000000000000000000000000000000000046145b1561107e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061113657607f821691505b60208210810361115657634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461117081611122565b8084870152604060018084166000811461119157600181146111ab576111d9565b60ff1985168984015283151560051b8901830195506111d9565b896000528660002060005b858110156111d15781548b82018601529083019088016111b6565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561121d57602081850181015186830182015201611201565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f860208301846111f7565b60008083601f84011261126257600080fd5b50813567ffffffffffffffff81111561127a57600080fd5b60208301915083602082850101111561129257600080fd5b9250929050565b6000806000604084860312156112ae57600080fd5b83359250602084013567ffffffffffffffff8111156112cc57600080fd5b6112d886828701611250565b9497909650939450505050565b6000806000606084860312156112fa57600080fd5b833567ffffffffffffffff81111561131157600080fd5b8401610160818703121561132457600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061135d908301846111f7565b949350505050565b6001600160a01b038116811461137a57600080fd5b50565b803561138881611365565b919050565b600080600080606085870312156113a357600080fd5b84356113ae81611365565b935060208501356113be81611365565b9250604085013567ffffffffffffffff8111156113da57600080fd5b6113e687828801611250565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf6113f2565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061145e60408301848661141b565b95945050505050565b60006020828403121561147957600080fd5b5051919050565b6000808335601e1984360301811261149757600080fd5b83018035915067ffffffffffffffff8211156114b257600080fd5b60200191503681900382131561129257600080fd5b600080858511156114d757600080fd5b838611156114e457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115195780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561155b5761155b611521565b60405290565b600082601f83011261157257600080fd5b813567ffffffffffffffff8082111561158d5761158d611521565b604051601f8301601f19908116603f011681019082821181831017156115b5576115b5611521565b816040528381528660208588010111156115ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561160157600080fd5b611609611537565b6116128361137d565b815260208301356020820152604083013567ffffffffffffffff8082111561163957600080fd5b61164536838701611561565b6040840152606085013591508082111561165e57600080fd5b61166a36838701611561565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116ba57600080fd5b6116c636828801611561565b8385015250610140915081850135818111156116e157600080fd5b6116ed36828801611561565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156115195760149490940360031b84901b1690921692915050565b60208152600061135d60208301848661141b565b6060815261175e6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117866101c08501836111f7565b91506060870151605f19808685030160c08701526117a484836111f7565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261180087876111f7565b9650808c0151955050505080868503016101a0870152505061182282826111f7565b602085019690965250505060400152919050565b601f82111561187c57600081815260208120601f850160051c8101602086101561185d5750805b601f850160051c820191505b81811015610a5b57828155600101611869565b505050565b67ffffffffffffffff83111561189957611899611521565b6118ad836118a78354611122565b83611836565b6000601f8411600181146118e157600085156118c95750838201355b600019600387901b1c1916600186901b17835561193b565b600083815260209020601f19861690835b8281101561191257868501358255602094850194600190920191016118f2565b508682101561192f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf6113f2565b6001600160d01b031981358181169160068510156115195760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1c", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xd96fC2b4Bd575eFd14D41f9b3D15F134A051E4FE", + "initCode": "61016060405234801561001157600080fd5b50604051611b62380380611b6283398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119a16101c160003960008181610347015261050c01526000611085015260006110d4015260006110af01526000611008015260006110320152600061105c01526119a16000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161115c565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161115c565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c29291906111e7565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061123d565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061123d565b60405180910390f35b34801561028657600080fd5b5061029a610295366004611299565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce3660046112e5565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b604051610271929190611339565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c36600461138d565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611408565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611444565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611467565b9050600061047482610a97565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b6000610589610140860186611480565b610598916004916000916114c7565b6105a1916114f1565b905060006105ae866115ee565b90506000806105c06060890189611480565b6105cf916004916000916114c7565b6105d8916114f1565b90506001600160e01b03198416600003610670576105f5886115ee565b9250610605610140890189611480565b6106139160049082906114c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a057610693610140890189611480565b6106a2916024916010916114c7565b6106ab916116fd565b60601c915036600081816106cc856106c76101408f018f611480565b610b08565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611730565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611744565b915050610842868280602001905181019061083d9190611467565b610f12565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611122565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611122565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d4919083611881565b5060006109f686630c95955660e01b8686604051602401610417929190611730565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909590945092505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610ad3575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b1d60586038898b6114c7565b610b2691611942565b905087605888610b368483611960565b92610b43939291906114c7565b909550935060008888610b57846058611960565b90610b63856078611960565b92610b70939291906114c7565b610b7991611942565b60001c90506000610c5a7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bb9939291906114c7565b610bc291611942565b60001c8d8d602490603892610bd9939291906114c7565b610be2916116fd565b60601c8b8b604051610bf59291906111e7565b604051908190038120610c3f95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fad565b90506000610cc9610c696103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c938a6078611960565b9089610ca08c6078611960565b610caa9190611960565b92610cb7939291906114c7565b60405160240161041793929190611444565b915050610d1981806020019051810190610ce39190611467565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d0a939291906114c7565b610d1391611942565b16610f12565b98508a8a84610d29876078611960565b610d339190611960565b610d3e9282906114c7565b9550955060405180608001604052808c8c600490600a92610d61939291906114c7565b610d6a91611973565b60d01c65ffffffffffff1681526020018c8c600a90601092610d8e939291906114c7565b610d9791611973565b60d01c65ffffffffffff1681526020018c8c602490603892610dbb939291906114c7565b610dc4916116fd565b60601c6001600160a01b031681526020018c8c601090602492610de9939291906114c7565b610df2916116fd565b60601c9052610dff6103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610eaa602460108c8e6114c7565b610eb3916116fd565b60013090810180546001600160a01b03191660609390931c92909217909155600301610ee0888a83611881565b50888b60588c610ef08883611960565b92610efd939291906114c7565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f35575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f5f578193505b8065ffffffffffff168365ffffffffffff161115610f7b578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fba610ffb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561105457507f000000000000000000000000000000000000000000000000000000000000000046145b1561107e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061113657607f821691505b60208210810361115657634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461117081611122565b8084870152604060018084166000811461119157600181146111ab576111d9565b60ff1985168984015283151560051b8901830195506111d9565b896000528660002060005b858110156111d15781548b82018601529083019088016111b6565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561121d57602081850181015186830182015201611201565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f860208301846111f7565b60008083601f84011261126257600080fd5b50813567ffffffffffffffff81111561127a57600080fd5b60208301915083602082850101111561129257600080fd5b9250929050565b6000806000604084860312156112ae57600080fd5b83359250602084013567ffffffffffffffff8111156112cc57600080fd5b6112d886828701611250565b9497909650939450505050565b6000806000606084860312156112fa57600080fd5b833567ffffffffffffffff81111561131157600080fd5b8401610160818703121561132457600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061135d908301846111f7565b949350505050565b6001600160a01b038116811461137a57600080fd5b50565b803561138881611365565b919050565b600080600080606085870312156113a357600080fd5b84356113ae81611365565b935060208501356113be81611365565b9250604085013567ffffffffffffffff8111156113da57600080fd5b6113e687828801611250565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf6113f2565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061145e60408301848661141b565b95945050505050565b60006020828403121561147957600080fd5b5051919050565b6000808335601e1984360301811261149757600080fd5b83018035915067ffffffffffffffff8211156114b257600080fd5b60200191503681900382131561129257600080fd5b600080858511156114d757600080fd5b838611156114e457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115195780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561155b5761155b611521565b60405290565b600082601f83011261157257600080fd5b813567ffffffffffffffff8082111561158d5761158d611521565b604051601f8301601f19908116603f011681019082821181831017156115b5576115b5611521565b816040528381528660208588010111156115ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561160157600080fd5b611609611537565b6116128361137d565b815260208301356020820152604083013567ffffffffffffffff8082111561163957600080fd5b61164536838701611561565b6040840152606085013591508082111561165e57600080fd5b61166a36838701611561565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116ba57600080fd5b6116c636828801611561565b8385015250610140915081850135818111156116e157600080fd5b6116ed36828801611561565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156115195760149490940360031b84901b1690921692915050565b60208152600061135d60208301848661141b565b6060815261175e6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117866101c08501836111f7565b91506060870151605f19808685030160c08701526117a484836111f7565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261180087876111f7565b9650808c0151955050505080868503016101a0870152505061182282826111f7565b602085019690965250505060400152919050565b601f82111561187c57600081815260208120601f850160051c8101602086101561185d5750805b601f850160051c820191505b81811015610a5b57828155600101611869565b505050565b67ffffffffffffffff83111561189957611899611521565b6118ad836118a78354611122565b83611836565b6000601f8411600181146118e157600085156118c95750838201355b600019600387901b1c1916600186901b17835561193b565b600083815260209020601f19861690835b8281101561191257868501358255602094850194600190920191016118f2565b508682101561192f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf6113f2565b6001600160d01b031981358181169160068510156115195760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xbd20Cab340Df38A63234e35026442F5D511dbf21", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x989c7bc39645391bf3fc10a9bb6f93687a7c47b0a06de4d55f01a778c193a271", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0xa66052E04AfF420521064dAEECC59eF4cf3A1ABD", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x9b72d", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b506107e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a366004610620565b61011a565b005b61009a61007f366004610662565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c536600461068b565b61019a565b6040519081526020016100ae565b6100ca6100e63660046106d7565b610220565b61006f6100f9366004610620565b505033600090815260208190526040902080546001600160a01b0319169055565b6000610129601482848661072b565b61013291610755565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b03161461020f576001610212565b60005b60ff169150505b9392505050565b60008080806102326020880188610662565b6001600160a01b03908116825260208201929092526040016000205416905061029d8461026361014088018861078a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035f92505050565b6001600160a01b0316816001600160a01b0316036102bf576000915050610219565b6000610318856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061032e826102636101408a018a61078a565b9050806001600160a01b0316836001600160a01b0316146103555760019350505050610219565b5050509392505050565b600080600061036e8585610383565b9150915061037b816103c8565b509392505050565b60008082516041036103b95760208301516040840151606085015160001a6103ad8782858561051a565b945094505050506103c1565b506000905060025b9250929050565b60008160048111156103dc576103dc6107d1565b036103e45750565b60018160048111156103f8576103f86107d1565b0361044a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561045e5761045e6107d1565b036104ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610441565b60038160048111156104bf576104bf6107d1565b036105175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610441565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561055157506000905060036105d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156105a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105ce576000600192509250506105d5565b9150600090505b94509492505050565b60008083601f8401126105f057600080fd5b50813567ffffffffffffffff81111561060857600080fd5b6020830191508360208285010111156103c157600080fd5b6000806020838503121561063357600080fd5b823567ffffffffffffffff81111561064a57600080fd5b610656858286016105de565b90969095509350505050565b60006020828403121561067457600080fd5b81356001600160a01b038116811461021957600080fd5b6000806000604084860312156106a057600080fd5b83359250602084013567ffffffffffffffff8111156106be57600080fd5b6106ca868287016105de565b9497909650939450505050565b6000806000606084860312156106ec57600080fd5b833567ffffffffffffffff81111561070357600080fd5b8401610160818703121561071657600080fd5b95602085013595506040909401359392505050565b6000808585111561073b57600080fd5b8386111561074857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107825780818660140360031b1b83161692505b505092915050565b6000808335601e198436030181126107a157600080fd5b83018035915067ffffffffffffffff8211156107bc57600080fd5b6020019150368190038213156103c157600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x1d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x95ee09aab102984b74696649f552c0e67deb3c30110162941c5dc2c68205d26b", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0x08E627ca6A0593C807091726a7fbB2887a1cB556", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4fbd6", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000008646ba75541866a33bfd6575c18915e498d0aaf5000000000000000000000000a66052e04aff420521064daeecc59ef4cf3a1abd0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x1e", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa1fb360440c7b5399f3afba03839a5165ad8308525d4f7d3fe756742c8f390f2", + "transactionIndex": "0x3", + "blockHash": "0x745569a5f6025bb84a2b1504ee44d2688517cf177a0f3da054546b1d7fa58b25", + "blockNumber": "0x22790b2", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x40950d", + "gasUsed": "0x3f9ef5", + "contractAddress": "0x8646Ba75541866a33bfd6575C18915E498d0aaF5", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x000000000000000000000000000000000000000000000000001da0348fa4b4b00000000000000000000000000000000000000000000000000c26f186ca8aefcc000000000000000000000000000000000000000000001f8bbdae209115eaece50000000000000000000000000000000000000000000000000c0951523ae63b1c000000000000000000000000000000000000000000001f8bbdcbc0c5a58fa195", + "blockHash": "0x745569a5f6025bb84a2b1504ee44d2688517cf177a0f3da054546b1d7fa58b25", + "blockNumber": "0x22790b2", + "transactionHash": "0xa1fb360440c7b5399f3afba03839a5165ad8308525d4f7d3fe756742c8f390f2", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x989c7bc39645391bf3fc10a9bb6f93687a7c47b0a06de4d55f01a778c193a271", + "transactionIndex": "0x4", + "blockHash": "0x745569a5f6025bb84a2b1504ee44d2688517cf177a0f3da054546b1d7fa58b25", + "blockNumber": "0x22790b2", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x480e44", + "gasUsed": "0x77937", + "contractAddress": "0xa66052E04AfF420521064dAEECC59eF4cf3A1ABD", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x00000000000000000000000000000000000000000000000000037ae8faff38900000000000000000000000000000000000000000000000000c09515236ec4bcc000000000000000000000000000000000000000000001f8bbdcbc0c5a58fa1950000000000000000000000000000000000000000000000000c05d6693bed133c000000000000000000000000000000000000000000001f8bbdcf3baea08eda25", + "blockHash": "0x745569a5f6025bb84a2b1504ee44d2688517cf177a0f3da054546b1d7fa58b25", + "blockNumber": "0x22790b2", + "transactionHash": "0x989c7bc39645391bf3fc10a9bb6f93687a7c47b0a06de4d55f01a778c193a271", + "transactionIndex": "0x4", + "logIndex": "0x7", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x95ee09aab102984b74696649f552c0e67deb3c30110162941c5dc2c68205d26b", + "transactionIndex": "0x5", + "blockHash": "0x745569a5f6025bb84a2b1504ee44d2688517cf177a0f3da054546b1d7fa58b25", + "blockNumber": "0x22790b2", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x4be3ae", + "gasUsed": "0x3d56a", + "contractAddress": "0x08E627ca6A0593C807091726a7fbB2887a1cB556", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000001c901ac15f1600000000000000000000000000000000000000000000000000c05d6693b757fcc000000000000000000000000000000000000000000001f8bbdcf3baea08eda250000000000000000000000000000000000000000000000000c040d678f5f8e6c000000000000000000000000000000000000000000001f8bbdd104b04ca4cb85", + "blockHash": "0x745569a5f6025bb84a2b1504ee44d2688517cf177a0f3da054546b1d7fa58b25", + "blockNumber": "0x22790b2", + "transactionHash": "0x95ee09aab102984b74696649f552c0e67deb3c30110162941c5dc2c68205d26b", + "transactionIndex": "0x5", + "logIndex": "0x8", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1685274653, + "chain": 80001, + "multi": false, + "commit": "d885223" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685552729.json b/broadcast/DeployKernel.s.sol/80001/run-1685552729.json new file mode 100644 index 00000000..d33f1f24 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685552729.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0xe9b58b16cf2f004daf6a7c01713c0e6bca8376da9ab948074359d1696827a541", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0xCB7a5c2789A9eeb544568C885a1c562b67Ffc77D", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x52469a", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x25", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xf14a4b1213c71bFBeDb854f39476794Ae65096C7", + "initCode": "61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x3f5d076AD2a7Aa4191F64517FE93740c26Aea03C", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x8e488eca154c1f3b1f30b3036a0d6551e7688eb67157e65c51af6465f62b360d", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0x9B43aB0534e33b458123b17BFb1Ad6a192Cd9E58", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0xa3f13", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x26", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x64c333d9abc1f9597b82743944b96a560f8830c0659733da5b872983e8e81591", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0x983517ec33ADcc44ba10F2929fb1d2395bb3880C", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4fbd6", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b939250505056000000000000000000000000cb7a5c2789a9eeb544568c885a1c562b67ffc77d0000000000000000000000009b43ab0534e33b458123b17bfb1ad6a192cd9e580000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x27", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xe9b58b16cf2f004daf6a7c01713c0e6bca8376da9ab948074359d1696827a541", + "0x8e488eca154c1f3b1f30b3036a0d6551e7688eb67157e65c51af6465f62b360d", + "0x64c333d9abc1f9597b82743944b96a560f8830c0659733da5b872983e8e81591" + ], + "returns": {}, + "timestamp": 1685552729, + "chain": 80001, + "multi": false, + "commit": "d3898a0" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685552736.json b/broadcast/DeployKernel.s.sol/80001/run-1685552736.json new file mode 100644 index 00000000..f18ea9c8 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685552736.json @@ -0,0 +1,182 @@ +{ + "transactions": [ + { + "hash": "0xe9b58b16cf2f004daf6a7c01713c0e6bca8376da9ab948074359d1696827a541", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0xCB7a5c2789A9eeb544568C885a1c562b67Ffc77D", + "function": null, + "arguments": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x52469a", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x25", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xf14a4b1213c71bFBeDb854f39476794Ae65096C7", + "initCode": "61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x3f5d076AD2a7Aa4191F64517FE93740c26Aea03C", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x8e488eca154c1f3b1f30b3036a0d6551e7688eb67157e65c51af6465f62b360d", + "transactionType": "CREATE", + "contractName": "ECDSAValidator", + "contractAddress": "0x9B43aB0534e33b458123b17BFb1Ad6a192Cd9E58", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0xa3f13", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x26", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x64c333d9abc1f9597b82743944b96a560f8830c0659733da5b872983e8e81591", + "transactionType": "CREATE", + "contractName": null, + "contractAddress": "0x983517ec33ADcc44ba10F2929fb1d2395bb3880C", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x4fbd6", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b939250505056000000000000000000000000cb7a5c2789a9eeb544568c885a1c562b67ffc77d0000000000000000000000009b43ab0534e33b458123b17bfb1ad6a192cd9e580000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x27", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe9b58b16cf2f004daf6a7c01713c0e6bca8376da9ab948074359d1696827a541", + "transactionIndex": "0x13", + "blockHash": "0xdb33fcf52fecf2374a77b35c90496c91aae830e815a7327128bdc4cacc715864", + "blockNumber": "0x2298fe1", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x9a7107", + "gasUsed": "0x3f4a01", + "contractAddress": "0xCB7a5c2789A9eeb544568C885a1c562b67Ffc77D", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x000000000000000000000000000000000000000000000000001d78a55c08f3f000000000000000000000000000000000000000000000000003abe1ff08d84f6c0000000000000000000000000000000000000000000031dba960182241a96912000000000000000000000000000000000000000000000000038e6959accf5b7c0000000000000000000000000000000000000000000031dba97d90c79db25d02", + "blockHash": "0xdb33fcf52fecf2374a77b35c90496c91aae830e815a7327128bdc4cacc715864", + "blockNumber": "0x2298fe1", + "transactionHash": "0xe9b58b16cf2f004daf6a7c01713c0e6bca8376da9ab948074359d1696827a541", + "transactionIndex": "0x13", + "logIndex": "0x9f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x8e488eca154c1f3b1f30b3036a0d6551e7688eb67157e65c51af6465f62b360d", + "transactionIndex": "0x14", + "blockHash": "0xdb33fcf52fecf2374a77b35c90496c91aae830e815a7327128bdc4cacc715864", + "blockNumber": "0x2298fe1", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0xa252c7", + "gasUsed": "0x7e1c0", + "contractAddress": "0x9B43aB0534e33b458123b17BFb1Ad6a192Cd9E58", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x0000000000000000000000000000000000000000000000000003ab968ac4e400000000000000000000000000000000000000000000000000038e6959a8dabb6c0000000000000000000000000000000000000000000031dba97d90c79db25d02000000000000000000000000000000000000000000000000038abdc31e15d76c0000000000000000000000000000000000000000000031dba9813c5e28774102", + "blockHash": "0xdb33fcf52fecf2374a77b35c90496c91aae830e815a7327128bdc4cacc715864", + "blockNumber": "0x2298fe1", + "transactionHash": "0x8e488eca154c1f3b1f30b3036a0d6551e7688eb67157e65c51af6465f62b360d", + "transactionIndex": "0x14", + "logIndex": "0xa0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x64c333d9abc1f9597b82743944b96a560f8830c0659733da5b872983e8e81591", + "transactionIndex": "0x15", + "blockHash": "0xdb33fcf52fecf2374a77b35c90496c91aae830e815a7327128bdc4cacc715864", + "blockNumber": "0x2298fe1", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0xa62831", + "gasUsed": "0x3d56a", + "contractAddress": "0x983517ec33ADcc44ba10F2929fb1d2395bb3880C", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x0000000000000000000000000000000000000000000000000001c901ac15f160000000000000000000000000000000000000000000000000038abdc31d97bb6c0000000000000000000000000000000000000000000031dba9813c5e287741020000000000000000000000000000000000000000000000000388f4c17181ca0c0000000000000000000000000000000000000000000031dba983055fd48d3262", + "blockHash": "0xdb33fcf52fecf2374a77b35c90496c91aae830e815a7327128bdc4cacc715864", + "blockNumber": "0x2298fe1", + "transactionHash": "0x64c333d9abc1f9597b82743944b96a560f8830c0659733da5b872983e8e81591", + "transactionIndex": "0x15", + "logIndex": "0xa1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1685552736, + "chain": 80001, + "multi": false, + "commit": "d3898a0" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685554144.json b/broadcast/DeployKernel.s.sol/80001/run-1685554144.json new file mode 100644 index 00000000..21585575 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685554144.json @@ -0,0 +1,104 @@ +{ + "transactions": [ + { + "hash": "0xd18af86f935b3c63d7cde4a1bcec8e4f5864409b4524b13dd6e243bac1630fca", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x5cbf01", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x28", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x5D006d3880645ec6e254E18C1F879DAC9Dd71A39", + "initCode": "60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xcc9B83cc9aF4a79663EC9E326c67B0Fd27Afd7f7", + "initCode": "61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xC69eb9FFCDD53cF035a6e3bd5b73C22a43A5dF7A", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x93b7b8afd9f03db8a328aea78170f45423f2cdacc2b2e3e5bd0d69493f99c7a2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x29", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xea6b432028289a0ca687b14b375873f38710dc31ea343a2c4ee6d83e71c2e5fd", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x59e62", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2a", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xD49a72cb78C44c6bfbf0d471581B7635cF62E81e", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xd18af86f935b3c63d7cde4a1bcec8e4f5864409b4524b13dd6e243bac1630fca", + "0x93b7b8afd9f03db8a328aea78170f45423f2cdacc2b2e3e5bd0d69493f99c7a2", + "0xea6b432028289a0ca687b14b375873f38710dc31ea343a2c4ee6d83e71c2e5fd" + ], + "returns": {}, + "timestamp": 1685554144, + "chain": 80001, + "multi": false, + "commit": "d3898a0" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685554151.json b/broadcast/DeployKernel.s.sol/80001/run-1685554151.json new file mode 100644 index 00000000..c1f9569e --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685554151.json @@ -0,0 +1,200 @@ +{ + "transactions": [ + { + "hash": "0xd18af86f935b3c63d7cde4a1bcec8e4f5864409b4524b13dd6e243bac1630fca", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x5cbf01", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x28", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x5D006d3880645ec6e254E18C1F879DAC9Dd71A39", + "initCode": "60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xcc9B83cc9aF4a79663EC9E326c67B0Fd27Afd7f7", + "initCode": "61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xC69eb9FFCDD53cF035a6e3bd5b73C22a43A5dF7A", + "initCode": "6101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x93b7b8afd9f03db8a328aea78170f45423f2cdacc2b2e3e5bd0d69493f99c7a2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xae7e3", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd", + "nonce": "0x29", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xea6b432028289a0ca687b14b375873f38710dc31ea343a2c4ee6d83e71c2e5fd", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x59e62", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x2a", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xD49a72cb78C44c6bfbf0d471581B7635cF62E81e", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xd18af86f935b3c63d7cde4a1bcec8e4f5864409b4524b13dd6e243bac1630fca", + "transactionIndex": "0x9", + "blockHash": "0xda4dcedeaefc3b7ddb67e68e7a3f025c4ae5b6f673a9cea0851e32b7e4d553f1", + "blockNumber": "0x229927a", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x65ec2b", + "gasUsed": "0x3f6a89", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x000000000000000000000000000000000000000000000000001d87cb62be20e70000000000000000000000000000000000000000000000000388f4c17144736c00000000000000000000000000000000000000000000112865af64dd70a568cd000000000000000000000000000000000000000000000000036b6cf60e86528500000000000000000000000000000000000000000000112865cceca8d36389b4", + "blockHash": "0xda4dcedeaefc3b7ddb67e68e7a3f025c4ae5b6f673a9cea0851e32b7e4d553f1", + "blockNumber": "0x229927a", + "transactionHash": "0xd18af86f935b3c63d7cde4a1bcec8e4f5864409b4524b13dd6e243bac1630fca", + "transactionIndex": "0x9", + "logIndex": "0x29", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x93b7b8afd9f03db8a328aea78170f45423f2cdacc2b2e3e5bd0d69493f99c7a2", + "transactionIndex": "0xa", + "blockHash": "0xda4dcedeaefc3b7ddb67e68e7a3f025c4ae5b6f673a9cea0851e32b7e4d553f1", + "blockNumber": "0x229927a", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x6dd172", + "gasUsed": "0x7e547", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x0000000000000000000000000000000000000000000000000003ad3b08b9d249000000000000000000000000000000000000000000000000036b6cf60a503f6c00000000000000000000000000000000000000000000112865cceca8d36389b40000000000000000000000000000000000000000000000000367bfbb01966d2300000000000000000000000000000000000000000000112865d099e3dc1d5bfd", + "blockHash": "0xda4dcedeaefc3b7ddb67e68e7a3f025c4ae5b6f673a9cea0851e32b7e4d553f1", + "blockNumber": "0x229927a", + "transactionHash": "0x93b7b8afd9f03db8a328aea78170f45423f2cdacc2b2e3e5bd0d69493f99c7a2", + "transactionIndex": "0xa", + "logIndex": "0x2a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xea6b432028289a0ca687b14b375873f38710dc31ea343a2c4ee6d83e71c2e5fd", + "transactionIndex": "0xb", + "blockHash": "0xda4dcedeaefc3b7ddb67e68e7a3f025c4ae5b6f673a9cea0851e32b7e4d553f1", + "blockNumber": "0x229927a", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x71a8f5", + "gasUsed": "0x3d783", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x0000000000000000000000000000000000000000000000000001c9fbbb756c4d0000000000000000000000000000000000000000000000000367bfbb0110336c00000000000000000000000000000000000000000000112865d099e3dc1d5bfd0000000000000000000000000000000000000000000000000365f5bf459ac71f00000000000000000000000000000000000000000000112865d263df9792c84a", + "blockHash": "0xda4dcedeaefc3b7ddb67e68e7a3f025c4ae5b6f673a9cea0851e32b7e4d553f1", + "blockNumber": "0x229927a", + "transactionHash": "0xea6b432028289a0ca687b14b375873f38710dc31ea343a2c4ee6d83e71c2e5fd", + "transactionIndex": "0xb", + "logIndex": "0x2b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1685554151, + "chain": 80001, + "multi": false, + "commit": "d3898a0" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685562259.json b/broadcast/DeployKernel.s.sol/80001/run-1685562259.json new file mode 100644 index 00000000..26215f3b --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685562259.json @@ -0,0 +1,60 @@ +{ + "transactions": [ + { + "hash": "0xdd0f850851e4ec5503895964e7f9b1e65383fdbfd4922f3229abb15318086f80", + "transactionType": "CREATE", + "contractName": "ERC721Actions", + "contractAddress": "0x64A5061A9a478028873e86eE551EFf6c040054E2", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x22261", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631888bfd714602d575b600080fd5b603c603836600460c4565b603e565b005b6040516323b872dd60e01b81523060048201526001600160a01b038281166024830152604482018490528416906323b872dd90606401600060405180830381600087803b158015608d57600080fd5b505af115801560a0573d6000803e3d6000fd5b50505050505050565b80356001600160a01b038116811460bf57600080fd5b919050565b60008060006060848603121560d857600080fd5b60df8460a9565b92506020840135915060f26040850160a9565b9050925092509256", + "nonce": "0x2d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x780326589b0ee3de442293de5886598bc4507980ddcdba3a82e965ec779553f8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xf4046", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610c1c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610964565b610179565b005b61008461007f3660046109a6565b61034e565b6040519081526020015b60405180910390f35b6100846100a53660046109f2565b610390565b61006f6100b8366004610964565b610661565b61012c6100cb366004610a62565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a95565b61019191610abf565b60601c905060006101a6601860148587610a95565b6101af91610af4565b905060006101c1601c60188688610a95565b6101ca91610af4565b905060006101dc6022601c8789610a95565b6101e591610b22565b60d01c905060006101fa60286022888a610a95565b61020391610b22565b60d01c90506000610218602c6028898b610a95565b61022191610af4565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a08401908152336000908152808c528581206001600160a01b039d909d1681529b909a5292909920905181549751995195519251985164ffffffffff1990981690151564ffffffff0019161761010099841c99909902989098176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b949092169390930263ffffffff60a81b191617600160a81b63ffffffff9092169190910217909155505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103ea846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061043a82610400610140890189610b50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106a892505050565b90506000808061044d60208a018a610b97565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805490915060ff1661048e576001935050505061065a565b8054610100900460e01b6001600160e01b0319166104af6060890189610b50565b6104be91600491600091610a95565b6104c791610af4565b6001600160e01b031916146105175760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610387565b60006105266060890189610b50565b8354600160a81b900463ffffffff1690610541826014610bb2565b63ffffffff169261055493929190610a95565b61055d91610abf565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190610be4565b6106285760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610387565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106706014828486610a95565b61067991610abf565b3360009081526020818152604080832060609490941c83529290522080546001600160c81b0319169055505050565b60008060006106b785856106cc565b915091506106c481610711565b509392505050565b60008082516041036107025760208301516040840151606085015160001a6106f68782858561085e565b9450945050505061070a565b506000905060025b9250929050565b600081600481111561072557610725610c06565b0361072d5750565b600181600481111561074157610741610c06565b0361078e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610387565b60028160048111156107a2576107a2610c06565b036107ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610387565b600381600481111561080357610803610c06565b0361085b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610387565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108955750600090506003610919565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108e9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661091257600060019250925050610919565b9150600090505b94509492505050565b60008083601f84011261093457600080fd5b50813567ffffffffffffffff81111561094c57600080fd5b60208301915083602082850101111561070a57600080fd5b6000806020838503121561097757600080fd5b823567ffffffffffffffff81111561098e57600080fd5b61099a85828601610922565b90969095509350505050565b6000806000604084860312156109bb57600080fd5b83359250602084013567ffffffffffffffff8111156109d957600080fd5b6109e586828701610922565b9497909650939450505050565b600080600060608486031215610a0757600080fd5b833567ffffffffffffffff811115610a1e57600080fd5b84016101608187031215610a3157600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a5d57600080fd5b919050565b60008060408385031215610a7557600080fd5b610a7e83610a46565b9150610a8c60208401610a46565b90509250929050565b60008085851115610aa557600080fd5b83861115610ab257600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610aec5780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610aec5760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610aec5760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6757600080fd5b83018035915067ffffffffffffffff821115610b8257600080fd5b60200191503681900382131561070a57600080fd5b600060208284031215610ba957600080fd5b61065a82610a46565b63ffffffff818116838216019080821115610bdd57634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bf657600080fd5b8151801515811461065a57600080fd5b634e487b7160e01b600052602160045260246000fd00000000000000000000000064a5061a9a478028873e86ee551eff6c040054e2", + "nonce": "0x2e", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x10997c91a2D823C6fDD468540F1Ca7665f717c89", + "initCode": "608060405234801561001057600080fd5b50610c1c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610964565b610179565b005b61008461007f3660046109a6565b61034e565b6040519081526020015b60405180910390f35b6100846100a53660046109f2565b610390565b61006f6100b8366004610964565b610661565b61012c6100cb366004610a62565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a95565b61019191610abf565b60601c905060006101a6601860148587610a95565b6101af91610af4565b905060006101c1601c60188688610a95565b6101ca91610af4565b905060006101dc6022601c8789610a95565b6101e591610b22565b60d01c905060006101fa60286022888a610a95565b61020391610b22565b60d01c90506000610218602c6028898b610a95565b61022191610af4565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a08401908152336000908152808c528581206001600160a01b039d909d1681529b909a5292909920905181549751995195519251985164ffffffffff1990981690151564ffffffff0019161761010099841c99909902989098176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b949092169390930263ffffffff60a81b191617600160a81b63ffffffff9092169190910217909155505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103ea846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061043a82610400610140890189610b50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106a892505050565b90506000808061044d60208a018a610b97565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805490915060ff1661048e576001935050505061065a565b8054610100900460e01b6001600160e01b0319166104af6060890189610b50565b6104be91600491600091610a95565b6104c791610af4565b6001600160e01b031916146105175760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610387565b60006105266060890189610b50565b8354600160a81b900463ffffffff1690610541826014610bb2565b63ffffffff169261055493929190610a95565b61055d91610abf565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190610be4565b6106285760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610387565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106706014828486610a95565b61067991610abf565b3360009081526020818152604080832060609490941c83529290522080546001600160c81b0319169055505050565b60008060006106b785856106cc565b915091506106c481610711565b509392505050565b60008082516041036107025760208301516040840151606085015160001a6106f68782858561085e565b9450945050505061070a565b506000905060025b9250929050565b600081600481111561072557610725610c06565b0361072d5750565b600181600481111561074157610741610c06565b0361078e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610387565b60028160048111156107a2576107a2610c06565b036107ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610387565b600381600481111561080357610803610c06565b0361085b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610387565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108955750600090506003610919565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108e9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661091257600060019250925050610919565b9150600090505b94509492505050565b60008083601f84011261093457600080fd5b50813567ffffffffffffffff81111561094c57600080fd5b60208301915083602082850101111561070a57600080fd5b6000806020838503121561097757600080fd5b823567ffffffffffffffff81111561098e57600080fd5b61099a85828601610922565b90969095509350505050565b6000806000604084860312156109bb57600080fd5b83359250602084013567ffffffffffffffff8111156109d957600080fd5b6109e586828701610922565b9497909650939450505050565b600080600060608486031215610a0757600080fd5b833567ffffffffffffffff811115610a1e57600080fd5b84016101608187031215610a3157600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a5d57600080fd5b919050565b60008060408385031215610a7557600080fd5b610a7e83610a46565b9150610a8c60208401610a46565b90509250929050565b60008085851115610aa557600080fd5b83861115610ab257600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610aec5780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610aec5760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610aec5760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6757600080fd5b83018035915067ffffffffffffffff821115610b8257600080fd5b60200191503681900382131561070a57600080fd5b600060208284031215610ba957600080fd5b61065a82610a46565b63ffffffff818116838216019080821115610bdd57634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bf657600080fd5b8151801515811461065a57600080fd5b634e487b7160e01b600052602160045260246000fd00000000000000000000000064a5061a9a478028873e86ee551eff6c040054e2" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xdd0f850851e4ec5503895964e7f9b1e65383fdbfd4922f3229abb15318086f80", + "0x780326589b0ee3de442293de5886598bc4507980ddcdba3a82e965ec779553f8" + ], + "returns": {}, + "timestamp": 1685562259, + "chain": 80001, + "multi": false, + "commit": "55649c1" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685562265.json b/broadcast/DeployKernel.s.sol/80001/run-1685562265.json new file mode 100644 index 00000000..db01920a --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685562265.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0xdd0f850851e4ec5503895964e7f9b1e65383fdbfd4922f3229abb15318086f80", + "transactionType": "CREATE", + "contractName": "ERC721Actions", + "contractAddress": "0x64A5061A9a478028873e86eE551EFf6c040054E2", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x22261", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631888bfd714602d575b600080fd5b603c603836600460c4565b603e565b005b6040516323b872dd60e01b81523060048201526001600160a01b038281166024830152604482018490528416906323b872dd90606401600060405180830381600087803b158015608d57600080fd5b505af115801560a0573d6000803e3d6000fd5b50505050505050565b80356001600160a01b038116811460bf57600080fd5b919050565b60008060006060848603121560d857600080fd5b60df8460a9565b92506020840135915060f26040850160a9565b9050925092509256", + "nonce": "0x2d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x780326589b0ee3de442293de5886598bc4507980ddcdba3a82e965ec779553f8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xf4046", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610c1c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610964565b610179565b005b61008461007f3660046109a6565b61034e565b6040519081526020015b60405180910390f35b6100846100a53660046109f2565b610390565b61006f6100b8366004610964565b610661565b61012c6100cb366004610a62565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a95565b61019191610abf565b60601c905060006101a6601860148587610a95565b6101af91610af4565b905060006101c1601c60188688610a95565b6101ca91610af4565b905060006101dc6022601c8789610a95565b6101e591610b22565b60d01c905060006101fa60286022888a610a95565b61020391610b22565b60d01c90506000610218602c6028898b610a95565b61022191610af4565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a08401908152336000908152808c528581206001600160a01b039d909d1681529b909a5292909920905181549751995195519251985164ffffffffff1990981690151564ffffffff0019161761010099841c99909902989098176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b949092169390930263ffffffff60a81b191617600160a81b63ffffffff9092169190910217909155505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103ea846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061043a82610400610140890189610b50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106a892505050565b90506000808061044d60208a018a610b97565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805490915060ff1661048e576001935050505061065a565b8054610100900460e01b6001600160e01b0319166104af6060890189610b50565b6104be91600491600091610a95565b6104c791610af4565b6001600160e01b031916146105175760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610387565b60006105266060890189610b50565b8354600160a81b900463ffffffff1690610541826014610bb2565b63ffffffff169261055493929190610a95565b61055d91610abf565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190610be4565b6106285760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610387565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106706014828486610a95565b61067991610abf565b3360009081526020818152604080832060609490941c83529290522080546001600160c81b0319169055505050565b60008060006106b785856106cc565b915091506106c481610711565b509392505050565b60008082516041036107025760208301516040840151606085015160001a6106f68782858561085e565b9450945050505061070a565b506000905060025b9250929050565b600081600481111561072557610725610c06565b0361072d5750565b600181600481111561074157610741610c06565b0361078e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610387565b60028160048111156107a2576107a2610c06565b036107ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610387565b600381600481111561080357610803610c06565b0361085b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610387565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108955750600090506003610919565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108e9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661091257600060019250925050610919565b9150600090505b94509492505050565b60008083601f84011261093457600080fd5b50813567ffffffffffffffff81111561094c57600080fd5b60208301915083602082850101111561070a57600080fd5b6000806020838503121561097757600080fd5b823567ffffffffffffffff81111561098e57600080fd5b61099a85828601610922565b90969095509350505050565b6000806000604084860312156109bb57600080fd5b83359250602084013567ffffffffffffffff8111156109d957600080fd5b6109e586828701610922565b9497909650939450505050565b600080600060608486031215610a0757600080fd5b833567ffffffffffffffff811115610a1e57600080fd5b84016101608187031215610a3157600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a5d57600080fd5b919050565b60008060408385031215610a7557600080fd5b610a7e83610a46565b9150610a8c60208401610a46565b90509250929050565b60008085851115610aa557600080fd5b83861115610ab257600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610aec5780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610aec5760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610aec5760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6757600080fd5b83018035915067ffffffffffffffff821115610b8257600080fd5b60200191503681900382131561070a57600080fd5b600060208284031215610ba957600080fd5b61065a82610a46565b63ffffffff818116838216019080821115610bdd57634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bf657600080fd5b8151801515811461065a57600080fd5b634e487b7160e01b600052602160045260246000fd00000000000000000000000064a5061a9a478028873e86ee551eff6c040054e2", + "nonce": "0x2e", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x10997c91a2D823C6fDD468540F1Ca7665f717c89", + "initCode": "608060405234801561001057600080fd5b50610c1c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610964565b610179565b005b61008461007f3660046109a6565b61034e565b6040519081526020015b60405180910390f35b6100846100a53660046109f2565b610390565b61006f6100b8366004610964565b610661565b61012c6100cb366004610a62565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a95565b61019191610abf565b60601c905060006101a6601860148587610a95565b6101af91610af4565b905060006101c1601c60188688610a95565b6101ca91610af4565b905060006101dc6022601c8789610a95565b6101e591610b22565b60d01c905060006101fa60286022888a610a95565b61020391610b22565b60d01c90506000610218602c6028898b610a95565b61022191610af4565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a08401908152336000908152808c528581206001600160a01b039d909d1681529b909a5292909920905181549751995195519251985164ffffffffff1990981690151564ffffffff0019161761010099841c99909902989098176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b949092169390930263ffffffff60a81b191617600160a81b63ffffffff9092169190910217909155505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103ea846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061043a82610400610140890189610b50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106a892505050565b90506000808061044d60208a018a610b97565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805490915060ff1661048e576001935050505061065a565b8054610100900460e01b6001600160e01b0319166104af6060890189610b50565b6104be91600491600091610a95565b6104c791610af4565b6001600160e01b031916146105175760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610387565b60006105266060890189610b50565b8354600160a81b900463ffffffff1690610541826014610bb2565b63ffffffff169261055493929190610a95565b61055d91610abf565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190610be4565b6106285760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610387565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106706014828486610a95565b61067991610abf565b3360009081526020818152604080832060609490941c83529290522080546001600160c81b0319169055505050565b60008060006106b785856106cc565b915091506106c481610711565b509392505050565b60008082516041036107025760208301516040840151606085015160001a6106f68782858561085e565b9450945050505061070a565b506000905060025b9250929050565b600081600481111561072557610725610c06565b0361072d5750565b600181600481111561074157610741610c06565b0361078e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610387565b60028160048111156107a2576107a2610c06565b036107ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610387565b600381600481111561080357610803610c06565b0361085b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610387565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108955750600090506003610919565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108e9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661091257600060019250925050610919565b9150600090505b94509492505050565b60008083601f84011261093457600080fd5b50813567ffffffffffffffff81111561094c57600080fd5b60208301915083602082850101111561070a57600080fd5b6000806020838503121561097757600080fd5b823567ffffffffffffffff81111561098e57600080fd5b61099a85828601610922565b90969095509350505050565b6000806000604084860312156109bb57600080fd5b83359250602084013567ffffffffffffffff8111156109d957600080fd5b6109e586828701610922565b9497909650939450505050565b600080600060608486031215610a0757600080fd5b833567ffffffffffffffff811115610a1e57600080fd5b84016101608187031215610a3157600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a5d57600080fd5b919050565b60008060408385031215610a7557600080fd5b610a7e83610a46565b9150610a8c60208401610a46565b90509250929050565b60008085851115610aa557600080fd5b83861115610ab257600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610aec5780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610aec5760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610aec5760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6757600080fd5b83018035915067ffffffffffffffff821115610b8257600080fd5b60200191503681900382131561070a57600080fd5b600060208284031215610ba957600080fd5b61065a82610a46565b63ffffffff818116838216019080821115610bdd57634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bf657600080fd5b8151801515811461065a57600080fd5b634e487b7160e01b600052602160045260246000fd00000000000000000000000064a5061a9a478028873e86ee551eff6c040054e2" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xdd0f850851e4ec5503895964e7f9b1e65383fdbfd4922f3229abb15318086f80", + "transactionIndex": "0x6", + "blockHash": "0xa1ebc1bd2ba72a6e8e5e675dbf6a3818135b90db2bf2c7248f3a75affa12f9d9", + "blockNumber": "0x229a165", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x154871", + "gasUsed": "0x1a44b", + "contractAddress": "0x64A5061A9a478028873e86eE551EFf6c040054E2", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + ], + "data": "0x0000000000000000000000000000000000000000000000000000c3b6d36673050000000000000000000000000000000000000000000000000e7fe835dd00466c000000000000000000000000000000000000000000000a081c14cb0c7338015e0000000000000000000000000000000000000000000000000e7f247f0999d367000000000000000000000000000000000000000000000a081c158ec3469e7463", + "blockHash": "0xa1ebc1bd2ba72a6e8e5e675dbf6a3818135b90db2bf2c7248f3a75affa12f9d9", + "blockNumber": "0x229a165", + "transactionHash": "0xdd0f850851e4ec5503895964e7f9b1e65383fdbfd4922f3229abb15318086f80", + "transactionIndex": "0x6", + "logIndex": "0x1e", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0x780326589b0ee3de442293de5886598bc4507980ddcdba3a82e965ec779553f8", + "transactionIndex": "0x7", + "blockHash": "0xa1ebc1bd2ba72a6e8e5e675dbf6a3818135b90db2bf2c7248f3a75affa12f9d9", + "blockNumber": "0x229a165", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x205311", + "gasUsed": "0xb0aa0", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + ], + "data": "0x0000000000000000000000000000000000000000000000000005243ff488cb600000000000000000000000000000000000000000000000000e7f247f097dea6c000000000000000000000000000000000000000000000a081c158ec3469e74630000000000000000000000000000000000000000000000000e7a003f14f51f0c000000000000000000000000000000000000000000000a081c1ab3033b273fc3", + "blockHash": "0xa1ebc1bd2ba72a6e8e5e675dbf6a3818135b90db2bf2c7248f3a75affa12f9d9", + "blockNumber": "0x229a165", + "transactionHash": "0x780326589b0ee3de442293de5886598bc4507980ddcdba3a82e965ec779553f8", + "transactionIndex": "0x7", + "logIndex": "0x1f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1685562265, + "chain": 80001, + "multi": false, + "commit": "55649c1" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685566222.json b/broadcast/DeployKernel.s.sol/80001/run-1685566222.json new file mode 100644 index 00000000..591d77cb --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685566222.json @@ -0,0 +1,60 @@ +{ + "transactions": [ + { + "hash": "0xcca90b6aaeffb15645ebc414b1ad5adc180277f11a308b6edfbb66b6e29aa67f", + "transactionType": "CREATE", + "contractName": "ERC721Actions", + "contractAddress": "0xFC3a1F6577A8bCf6ef23AA1024E07c3504824dd3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x22261", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631888bfd714602d575b600080fd5b603c603836600460c4565b603e565b005b6040516323b872dd60e01b81523060048201526001600160a01b038281166024830152604482018490528416906323b872dd90606401600060405180830381600087803b158015608d57600080fd5b505af115801560a0573d6000803e3d6000fd5b50505050505050565b80356001600160a01b038116811460bf57600080fd5b919050565b60008060006060848603121560d857600080fd5b60df8460a9565b92506020840135915060f26040850160a9565b9050925092509256", + "nonce": "0x2f", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xee230f7e37becc731e583b52f54a11f8c629b17700ba48067ec3ba64e1a127d5", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xea763", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610b97806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa578063b7b8d604146100f3575b600080fd5b61006f61006a366004610920565b6101b6565b005b61008461007f366004610962565b61035b565b6040519081526020015b60405180910390f35b6100846100a53660046109ae565b61039d565b61006f6100b8366004610920565b505033600090815260208190526040902080546001600160e01b031916815560010180546fffffffffffffffffffffffffffffffff19169055565b610160610101366004610a02565b600060208190529081526040902080546001909101546001600160a01b03821691600160a01b810460e090811b92600160c01b909204901b9065ffffffffffff80821691600160301b810490911690600160601b900463ffffffff1686565b604080516001600160a01b039790971687526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101c56014828486610a2b565b6101ce91610a55565b60601c905060006101e3601860148587610a2b565b6101ec91610a8a565b905060006101fe601c60188688610a2b565b61020791610a8a565b905060006102196022601c8789610a2b565b61022291610ab8565b60d01c9050600061023760286022888a610a2b565b61024091610ab8565b60d01c90506000610255602c6028898b610a2b565b61025e91610a8a565b6040805160c0810182526001600160a01b0398891681526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081523360009081529a8b9052939099209151825498519151851c600160c01b0263ffffffff60c01b199290951c600160a01b026001600160c01b03199099169a169990991796909617979097161784555051600190920180549351945163ffffffff16600160601b0263ffffffff60601b19958316600160301b026bffffffffffffffffffffffff19909516939092169290921792909217929092161790555050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103f7846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006104478261040d610140890189610ae6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061066492505050565b90506000808061045a60208a018a610a02565b6001600160a01b03908116825260208201929092526040016000208054909250838216911614610490576001935050505061065d565b8054600160a01b900460e01b6001600160e01b0319166104b36060890189610ae6565b6104c291600491600091610a2b565b6104cb91610a8a565b6001600160e01b0319161461051b5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610394565b600061052a6060890189610ae6565b6001840154600160601b900463ffffffff1690610548826014610b2d565b63ffffffff169261055b93929190610a2b565b61056491610a55565b82546040516301ffc9a760e01b8152600160c01b90910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e19190610b5f565b61062d5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610394565b506001015460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60008060006106738585610688565b91509150610680816106cd565b509392505050565b60008082516041036106be5760208301516040840151606085015160001a6106b28782858561081a565b945094505050506106c6565b506000905060025b9250929050565b60008160048111156106e1576106e1610b81565b036106e95750565b60018160048111156106fd576106fd610b81565b0361074a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610394565b600281600481111561075e5761075e610b81565b036107ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610394565b60038160048111156107bf576107bf610b81565b036108175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610394565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085157506000905060036108d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166108ce576000600192509250506108d5565b9150600090505b94509492505050565b60008083601f8401126108f057600080fd5b50813567ffffffffffffffff81111561090857600080fd5b6020830191508360208285010111156106c657600080fd5b6000806020838503121561093357600080fd5b823567ffffffffffffffff81111561094a57600080fd5b610956858286016108de565b90969095509350505050565b60008060006040848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a1868287016108de565b9497909650939450505050565b6000806000606084860312156109c357600080fd5b833567ffffffffffffffff8111156109da57600080fd5b840161016081870312156109ed57600080fd5b95602085013595506040909401359392505050565b600060208284031215610a1457600080fd5b81356001600160a01b038116811461065d57600080fd5b60008085851115610a3b57600080fd5b83861115610a4857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610a825780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610a825760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610a825760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610afd57600080fd5b83018035915067ffffffffffffffff821115610b1857600080fd5b6020019150368190038213156106c657600080fd5b63ffffffff818116838216019080821115610b5857634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610b7157600080fd5b8151801515811461065d57600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000fc3a1f6577a8bcf6ef23aa1024e07c3504824dd3", + "nonce": "0x30", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x842Ea41c15B32a8bcbDb17B5232b220e3B87082B", + "initCode": "608060405234801561001057600080fd5b50610b97806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa578063b7b8d604146100f3575b600080fd5b61006f61006a366004610920565b6101b6565b005b61008461007f366004610962565b61035b565b6040519081526020015b60405180910390f35b6100846100a53660046109ae565b61039d565b61006f6100b8366004610920565b505033600090815260208190526040902080546001600160e01b031916815560010180546fffffffffffffffffffffffffffffffff19169055565b610160610101366004610a02565b600060208190529081526040902080546001909101546001600160a01b03821691600160a01b810460e090811b92600160c01b909204901b9065ffffffffffff80821691600160301b810490911690600160601b900463ffffffff1686565b604080516001600160a01b039790971687526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101c56014828486610a2b565b6101ce91610a55565b60601c905060006101e3601860148587610a2b565b6101ec91610a8a565b905060006101fe601c60188688610a2b565b61020791610a8a565b905060006102196022601c8789610a2b565b61022291610ab8565b60d01c9050600061023760286022888a610a2b565b61024091610ab8565b60d01c90506000610255602c6028898b610a2b565b61025e91610a8a565b6040805160c0810182526001600160a01b0398891681526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081523360009081529a8b9052939099209151825498519151851c600160c01b0263ffffffff60c01b199290951c600160a01b026001600160c01b03199099169a169990991796909617979097161784555051600190920180549351945163ffffffff16600160601b0263ffffffff60601b19958316600160301b026bffffffffffffffffffffffff19909516939092169290921792909217929092161790555050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103f7846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006104478261040d610140890189610ae6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061066492505050565b90506000808061045a60208a018a610a02565b6001600160a01b03908116825260208201929092526040016000208054909250838216911614610490576001935050505061065d565b8054600160a01b900460e01b6001600160e01b0319166104b36060890189610ae6565b6104c291600491600091610a2b565b6104cb91610a8a565b6001600160e01b0319161461051b5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610394565b600061052a6060890189610ae6565b6001840154600160601b900463ffffffff1690610548826014610b2d565b63ffffffff169261055b93929190610a2b565b61056491610a55565b82546040516301ffc9a760e01b8152600160c01b90910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e19190610b5f565b61062d5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610394565b506001015460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60008060006106738585610688565b91509150610680816106cd565b509392505050565b60008082516041036106be5760208301516040840151606085015160001a6106b28782858561081a565b945094505050506106c6565b506000905060025b9250929050565b60008160048111156106e1576106e1610b81565b036106e95750565b60018160048111156106fd576106fd610b81565b0361074a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610394565b600281600481111561075e5761075e610b81565b036107ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610394565b60038160048111156107bf576107bf610b81565b036108175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610394565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085157506000905060036108d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166108ce576000600192509250506108d5565b9150600090505b94509492505050565b60008083601f8401126108f057600080fd5b50813567ffffffffffffffff81111561090857600080fd5b6020830191508360208285010111156106c657600080fd5b6000806020838503121561093357600080fd5b823567ffffffffffffffff81111561094a57600080fd5b610956858286016108de565b90969095509350505050565b60008060006040848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a1868287016108de565b9497909650939450505050565b6000806000606084860312156109c357600080fd5b833567ffffffffffffffff8111156109da57600080fd5b840161016081870312156109ed57600080fd5b95602085013595506040909401359392505050565b600060208284031215610a1457600080fd5b81356001600160a01b038116811461065d57600080fd5b60008085851115610a3b57600080fd5b83861115610a4857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610a825780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610a825760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610a825760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610afd57600080fd5b83018035915067ffffffffffffffff821115610b1857600080fd5b6020019150368190038213156106c657600080fd5b63ffffffff818116838216019080821115610b5857634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610b7157600080fd5b8151801515811461065d57600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000fc3a1f6577a8bcf6ef23aa1024e07c3504824dd3" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xcca90b6aaeffb15645ebc414b1ad5adc180277f11a308b6edfbb66b6e29aa67f", + "0xee230f7e37becc731e583b52f54a11f8c629b17700ba48067ec3ba64e1a127d5" + ], + "returns": {}, + "timestamp": 1685566222, + "chain": 80001, + "multi": false, + "commit": "55649c1" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1685566229.json b/broadcast/DeployKernel.s.sol/80001/run-1685566229.json new file mode 100644 index 00000000..f2eb4914 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1685566229.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0xcca90b6aaeffb15645ebc414b1ad5adc180277f11a308b6edfbb66b6e29aa67f", + "transactionType": "CREATE", + "contractName": "ERC721Actions", + "contractAddress": "0xFC3a1F6577A8bCf6ef23AA1024E07c3504824dd3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x22261", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631888bfd714602d575b600080fd5b603c603836600460c4565b603e565b005b6040516323b872dd60e01b81523060048201526001600160a01b038281166024830152604482018490528416906323b872dd90606401600060405180830381600087803b158015608d57600080fd5b505af115801560a0573d6000803e3d6000fd5b50505050505050565b80356001600160a01b038116811460bf57600080fd5b919050565b60008060006060848603121560d857600080fd5b60df8460a9565b92506020840135915060f26040850160a9565b9050925092509256", + "nonce": "0x2f", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xee230f7e37becc731e583b52f54a11f8c629b17700ba48067ec3ba64e1a127d5", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0xea763", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610b97806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa578063b7b8d604146100f3575b600080fd5b61006f61006a366004610920565b6101b6565b005b61008461007f366004610962565b61035b565b6040519081526020015b60405180910390f35b6100846100a53660046109ae565b61039d565b61006f6100b8366004610920565b505033600090815260208190526040902080546001600160e01b031916815560010180546fffffffffffffffffffffffffffffffff19169055565b610160610101366004610a02565b600060208190529081526040902080546001909101546001600160a01b03821691600160a01b810460e090811b92600160c01b909204901b9065ffffffffffff80821691600160301b810490911690600160601b900463ffffffff1686565b604080516001600160a01b039790971687526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101c56014828486610a2b565b6101ce91610a55565b60601c905060006101e3601860148587610a2b565b6101ec91610a8a565b905060006101fe601c60188688610a2b565b61020791610a8a565b905060006102196022601c8789610a2b565b61022291610ab8565b60d01c9050600061023760286022888a610a2b565b61024091610ab8565b60d01c90506000610255602c6028898b610a2b565b61025e91610a8a565b6040805160c0810182526001600160a01b0398891681526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081523360009081529a8b9052939099209151825498519151851c600160c01b0263ffffffff60c01b199290951c600160a01b026001600160c01b03199099169a169990991796909617979097161784555051600190920180549351945163ffffffff16600160601b0263ffffffff60601b19958316600160301b026bffffffffffffffffffffffff19909516939092169290921792909217929092161790555050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103f7846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006104478261040d610140890189610ae6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061066492505050565b90506000808061045a60208a018a610a02565b6001600160a01b03908116825260208201929092526040016000208054909250838216911614610490576001935050505061065d565b8054600160a01b900460e01b6001600160e01b0319166104b36060890189610ae6565b6104c291600491600091610a2b565b6104cb91610a8a565b6001600160e01b0319161461051b5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610394565b600061052a6060890189610ae6565b6001840154600160601b900463ffffffff1690610548826014610b2d565b63ffffffff169261055b93929190610a2b565b61056491610a55565b82546040516301ffc9a760e01b8152600160c01b90910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e19190610b5f565b61062d5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610394565b506001015460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60008060006106738585610688565b91509150610680816106cd565b509392505050565b60008082516041036106be5760208301516040840151606085015160001a6106b28782858561081a565b945094505050506106c6565b506000905060025b9250929050565b60008160048111156106e1576106e1610b81565b036106e95750565b60018160048111156106fd576106fd610b81565b0361074a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610394565b600281600481111561075e5761075e610b81565b036107ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610394565b60038160048111156107bf576107bf610b81565b036108175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610394565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085157506000905060036108d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166108ce576000600192509250506108d5565b9150600090505b94509492505050565b60008083601f8401126108f057600080fd5b50813567ffffffffffffffff81111561090857600080fd5b6020830191508360208285010111156106c657600080fd5b6000806020838503121561093357600080fd5b823567ffffffffffffffff81111561094a57600080fd5b610956858286016108de565b90969095509350505050565b60008060006040848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a1868287016108de565b9497909650939450505050565b6000806000606084860312156109c357600080fd5b833567ffffffffffffffff8111156109da57600080fd5b840161016081870312156109ed57600080fd5b95602085013595506040909401359392505050565b600060208284031215610a1457600080fd5b81356001600160a01b038116811461065d57600080fd5b60008085851115610a3b57600080fd5b83861115610a4857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610a825780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610a825760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610a825760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610afd57600080fd5b83018035915067ffffffffffffffff821115610b1857600080fd5b6020019150368190038213156106c657600080fd5b63ffffffff818116838216019080821115610b5857634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610b7157600080fd5b8151801515811461065d57600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000fc3a1f6577a8bcf6ef23aa1024e07c3504824dd3", + "nonce": "0x30", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x842Ea41c15B32a8bcbDb17B5232b220e3B87082B", + "initCode": "608060405234801561001057600080fd5b50610b97806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa578063b7b8d604146100f3575b600080fd5b61006f61006a366004610920565b6101b6565b005b61008461007f366004610962565b61035b565b6040519081526020015b60405180910390f35b6100846100a53660046109ae565b61039d565b61006f6100b8366004610920565b505033600090815260208190526040902080546001600160e01b031916815560010180546fffffffffffffffffffffffffffffffff19169055565b610160610101366004610a02565b600060208190529081526040902080546001909101546001600160a01b03821691600160a01b810460e090811b92600160c01b909204901b9065ffffffffffff80821691600160301b810490911690600160601b900463ffffffff1686565b604080516001600160a01b039790971687526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101c56014828486610a2b565b6101ce91610a55565b60601c905060006101e3601860148587610a2b565b6101ec91610a8a565b905060006101fe601c60188688610a2b565b61020791610a8a565b905060006102196022601c8789610a2b565b61022291610ab8565b60d01c9050600061023760286022888a610a2b565b61024091610ab8565b60d01c90506000610255602c6028898b610a2b565b61025e91610a8a565b6040805160c0810182526001600160a01b0398891681526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081523360009081529a8b9052939099209151825498519151851c600160c01b0263ffffffff60c01b199290951c600160a01b026001600160c01b03199099169a169990991796909617979097161784555051600190920180549351945163ffffffff16600160601b0263ffffffff60601b19958316600160301b026bffffffffffffffffffffffff19909516939092169290921792909217929092161790555050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103f7846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006104478261040d610140890189610ae6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061066492505050565b90506000808061045a60208a018a610a02565b6001600160a01b03908116825260208201929092526040016000208054909250838216911614610490576001935050505061065d565b8054600160a01b900460e01b6001600160e01b0319166104b36060890189610ae6565b6104c291600491600091610a2b565b6104cb91610a8a565b6001600160e01b0319161461051b5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610394565b600061052a6060890189610ae6565b6001840154600160601b900463ffffffff1690610548826014610b2d565b63ffffffff169261055b93929190610a2b565b61056491610a55565b82546040516301ffc9a760e01b8152600160c01b90910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e19190610b5f565b61062d5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610394565b506001015460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60008060006106738585610688565b91509150610680816106cd565b509392505050565b60008082516041036106be5760208301516040840151606085015160001a6106b28782858561081a565b945094505050506106c6565b506000905060025b9250929050565b60008160048111156106e1576106e1610b81565b036106e95750565b60018160048111156106fd576106fd610b81565b0361074a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610394565b600281600481111561075e5761075e610b81565b036107ab5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610394565b60038160048111156107bf576107bf610b81565b036108175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610394565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085157506000905060036108d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166108ce576000600192509250506108d5565b9150600090505b94509492505050565b60008083601f8401126108f057600080fd5b50813567ffffffffffffffff81111561090857600080fd5b6020830191508360208285010111156106c657600080fd5b6000806020838503121561093357600080fd5b823567ffffffffffffffff81111561094a57600080fd5b610956858286016108de565b90969095509350505050565b60008060006040848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a1868287016108de565b9497909650939450505050565b6000806000606084860312156109c357600080fd5b833567ffffffffffffffff8111156109da57600080fd5b840161016081870312156109ed57600080fd5b95602085013595506040909401359392505050565b600060208284031215610a1457600080fd5b81356001600160a01b038116811461065d57600080fd5b60008085851115610a3b57600080fd5b83861115610a4857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610a825780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610a825760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610a825760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610afd57600080fd5b83018035915067ffffffffffffffff821115610b1857600080fd5b6020019150368190038213156106c657600080fd5b63ffffffff818116838216019080821115610b5857634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610b7157600080fd5b8151801515811461065d57600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000fc3a1f6577a8bcf6ef23aa1024e07c3504824dd3" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xcca90b6aaeffb15645ebc414b1ad5adc180277f11a308b6edfbb66b6e29aa67f", + "transactionIndex": "0xa", + "blockHash": "0xa6fd229004f855f5e9a48f15f32d29354f2959399c23af0c8a3371518779658d", + "blockNumber": "0x229a8af", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x2361ed", + "gasUsed": "0x1a44b", + "contractAddress": "0xFC3a1F6577A8bCf6ef23AA1024E07c3504824dd3", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + ], + "data": "0x0000000000000000000000000000000000000000000000000000c3b6d36817500000000000000000000000000000000000000000000000000e7a003f14396a6c000000000000000000000000000000000000000000000a090f05abee315aabe40000000000000000000000000000000000000000000000000e793c8840d1531c000000000000000000000000000000000000000000000a090f066fa504c2c334", + "blockHash": "0xa6fd229004f855f5e9a48f15f32d29354f2959399c23af0c8a3371518779658d", + "blockNumber": "0x229a8af", + "transactionHash": "0xcca90b6aaeffb15645ebc414b1ad5adc180277f11a308b6edfbb66b6e29aa67f", + "transactionIndex": "0xa", + "logIndex": "0x33", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xee230f7e37becc731e583b52f54a11f8c629b17700ba48067ec3ba64e1a127d5", + "transactionIndex": "0xb", + "blockHash": "0xa6fd229004f855f5e9a48f15f32d29354f2959399c23af0c8a3371518779658d", + "blockNumber": "0x229a8af", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x2dfddd", + "gasUsed": "0xa9bf0", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + ], + "data": "0x0000000000000000000000000000000000000000000000000004f0b4fa2d01000000000000000000000000000000000000000000000000000e793c8840b70e6c000000000000000000000000000000000000000000000a090f066fa504c2c3340000000000000000000000000000000000000000000000000e744bd3468a0d6c000000000000000000000000000000000000000000000a090f0b6059feefc434", + "blockHash": "0xa6fd229004f855f5e9a48f15f32d29354f2959399c23af0c8a3371518779658d", + "blockNumber": "0x229a8af", + "transactionHash": "0xee230f7e37becc731e583b52f54a11f8c629b17700ba48067ec3ba64e1a127d5", + "transactionIndex": "0xb", + "logIndex": "0x34", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1685566229, + "chain": 80001, + "multi": false, + "commit": "55649c1" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1689175940.json b/broadcast/DeployKernel.s.sol/80001/run-1689175940.json new file mode 100644 index 00000000..e58f5c95 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1689175940.json @@ -0,0 +1,74 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x35", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x36", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689175940, + "chain": 80001, + "multi": false, + "commit": "ccc01a6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1689175989.json b/broadcast/DeployKernel.s.sol/80001/run-1689175989.json new file mode 100644 index 00000000..fcf68112 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1689175989.json @@ -0,0 +1,74 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x35", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x36", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689175989, + "chain": 80001, + "multi": false, + "commit": "ccc01a6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1689176008.json b/broadcast/DeployKernel.s.sol/80001/run-1689176008.json new file mode 100644 index 00000000..c4e17e99 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1689176008.json @@ -0,0 +1,75 @@ +{ + "transactions": [ + { + "hash": "0xa2a4c692f4b80c93d24bc8128f0cc276619fa86aea99553ed35784c02175aa74", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x35" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x2e8c55abc96c5c8e25ae85bc75e48ca92d777f3762f17c77b97a693e69bb8287", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x36" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xa2a4c692f4b80c93d24bc8128f0cc276619fa86aea99553ed35784c02175aa74", + "0x2e8c55abc96c5c8e25ae85bc75e48ca92d777f3762f17c77b97a693e69bb8287" + ], + "returns": {}, + "timestamp": 1689176008, + "chain": 80001, + "multi": false, + "commit": "ccc01a6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1689176015.json b/broadcast/DeployKernel.s.sol/80001/run-1689176015.json new file mode 100644 index 00000000..bec66f08 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1689176015.json @@ -0,0 +1,139 @@ +{ + "transactions": [ + { + "hash": "0xa2a4c692f4b80c93d24bc8128f0cc276619fa86aea99553ed35784c02175aa74", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x579d3c", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x35" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x12358cA00141D09cB90253F05a1DD16bE93A8EE6", + "initCode": "60e060405234801561001057600080fd5b50604051614dea380380614dea83398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b5080610abe83390190565b6127dc8061260e83390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0x727A10897e70cd3Ab1a6e43d59A12ab0895A4995", + "initCode": "61016060405234801561001157600080fd5b50604051611b50380380611b5083398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161198f6101c1600039600081816102df01526104a40152600061107a015260006110c9015260006110a401526000610ffd0152600061102701526000611051015261198f6000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f1461027957806354fd4d501461029c578063b0d691fe146102cd578063cf7a1d77146103195761007b565b806306fdde03146101ca5780631626ba7e146102125780633a871cdd1461024b5761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b5610339565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f2906002880190600401611151565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c95955690610171906003300190600401611151565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b3660008037600080366000875af43d6000803e8080156101c3573d6000f35b3d6000fd5b005b3480156101d657600080fd5b506101fc6040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102099190611222565b60405180910390f35b34801561021e57600080fd5b5061023261022d366004611277565b61036d565b6040516001600160e01b03199091168152602001610209565b34801561025757600080fd5b5061026b6102663660046112c3565b610497565b604051908152602001610209565b34801561028557600080fd5b5061028e6107ec565b604051610209929190611317565b3480156102a857600080fd5b506101fc60405180604001604052806005815260200164181718171960d91b81525081565b3480156102d957600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610209565b34801561032557600080fd5b506101c861033436600461136b565b610895565b60008061036760017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96113e6565b92915050565b6000806103e661037b610339565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b8787876040516024016103af93929190611422565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a00565b9150506000818060200190518101906103ff9190611445565b9050600061040c82610a54565b905042816020015165ffffffffffff16111561043657506001600160e01b03199250610490915050565b42816040015165ffffffffffff16101561045e57506001600160e01b03199250610490915050565b80516001600160a01b03161561048257506001600160e01b03199250610490915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105165760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e740000000060448201526064015b60405180910390fd5b600061052661014086018661145e565b610535916004916000916114a5565b61053e916114cf565b9050600061054b866115cc565b905060008061055d606089018961145e565b61056c916004916000916114a5565b610575916114cf565b90506001600160e01b0319841660000361060d57610592886115cc565b92506105a261014089018961145e565b6105b09160049082906114a5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526105f2610339565b60010154600160501b90046001600160a01b0316915061074a565b6001600160e01b03198416600160e11b0361073d5761063061014089018961145e565b61063f916024916010916114a5565b610648916116db565b60601c91503660008181610669856106646101408f018f61145e565b610ac5565b604051949d509297509095509350915060009061069b90889063064acaab60e11b906103af908990899060240161170e565b509050806106f65760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b606482015260840161050d565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408901525061074a9350505050565b6001945050505050610490565b851561079c57604051600090339088908381818185875af1925050503d8060008114610792576040519150601f19603f3d011682016040523d82523d6000602084013e610797565b606091505b505050505b60006107bf83633a871cdd60e01b868b8b6040516024016103af93929190611722565b9150506107df86828060200190518101906107da9190611445565b610ecf565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061081090611117565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90611117565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509150509091565b600061089f610339565b6001810154909150600160501b90046001600160a01b0316156109045760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161050d565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b03929092169190911790558282306002019161097191908361185f565b50600061099386630c95955660e01b86866040516024016103af92919061170e565b509050806109f85760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b606482015260840161050d565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e909250905081610a4d578060405162461bcd60e51b815260040161050d9190611222565b9250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610a90575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610ada60586038898b6114a5565b610ae391611920565b905087605888610af3848361193e565b92610b00939291906114a5565b909550935060008888610b1484605861193e565b90610b2085607861193e565b92610b2d939291906114a5565b610b3691611920565b60001c90506000610c177f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610b76939291906114a5565b610b7f91611920565b60001c8d8d602490603892610b96939291906114a5565b610b9f916116db565b60601c8b8b604051610bb2929190611951565b604051908190038120610bfc95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fa2565b90506000610c86610c26610339565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610c508a607861193e565b9089610c5d8c607861193e565b610c67919061193e565b92610c74939291906114a5565b6040516024016103af93929190611422565b915050610cd681806020019051810190610ca09190611445565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610cc7939291906114a5565b610cd091611920565b16610ecf565b98508a8a84610ce687607861193e565b610cf0919061193e565b610cfb9282906114a5565b9550955060405180608001604052808c8c600490600a92610d1e939291906114a5565b610d2791611961565b60d01c65ffffffffffff1681526020018c8c600a90601092610d4b939291906114a5565b610d5491611961565b60d01c65ffffffffffff1681526020018c8c602490603892610d78939291906114a5565b610d81916116db565b60601c6001600160a01b031681526020018c8c601090602492610da6939291906114a5565b610daf916116db565b60601c9052610dbc610339565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610e67602460108c8e6114a5565b610e70916116db565b60013090810180546001600160a01b03191660609390931c92909217909155600301610e9d888a8361185f565b50888b60588c610ead888361193e565b92610eba939291906114a5565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610ef257506001610367565b60d083901c60a084901c65ffffffffffff8116600003610f15575065ffffffffffff5b60d084901c60a085901c65ffffffffffff8116600003610f38575065ffffffffffff5b8165ffffffffffff168465ffffffffffff161015610f54578193505b8065ffffffffffff168365ffffffffffff161115610f70578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b6000610367610faf610ff0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561104957507f000000000000000000000000000000000000000000000000000000000000000046145b1561107357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061112b57607f821691505b60208210810361114b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461116581611117565b8084870152604060018084166000811461118657600181146111a0576111ce565b60ff1985168984015283151560051b8901830195506111ce565b896000528660002060005b858110156111c65781548b82018601529083019088016111ab565b8a0184019650505b509398975050505050505050565b6000815180845260005b81811015611202576020818501810151868301820152016111e6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061049060208301846111dc565b60008083601f84011261124757600080fd5b50813567ffffffffffffffff81111561125f57600080fd5b602083019150836020828501011115610a4d57600080fd5b60008060006040848603121561128c57600080fd5b83359250602084013567ffffffffffffffff8111156112aa57600080fd5b6112b686828701611235565b9497909650939450505050565b6000806000606084860312156112d857600080fd5b833567ffffffffffffffff8111156112ef57600080fd5b8401610160818703121561130257600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061133b908301846111dc565b949350505050565b6001600160a01b038116811461135857600080fd5b50565b803561136681611343565b919050565b6000806000806060858703121561138157600080fd5b843561138c81611343565b9350602085013561139c81611343565b9250604085013567ffffffffffffffff8111156113b857600080fd5b6113c487828801611235565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610367576103676113d0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061143c6040830184866113f9565b95945050505050565b60006020828403121561145757600080fd5b5051919050565b6000808335601e1984360301811261147557600080fd5b83018035915067ffffffffffffffff82111561149057600080fd5b602001915036819003821315610a4d57600080fd5b600080858511156114b557600080fd5b838611156114c257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156114f75780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715611539576115396114ff565b60405290565b600082601f83011261155057600080fd5b813567ffffffffffffffff8082111561156b5761156b6114ff565b604051601f8301601f19908116603f01168101908282118183101715611593576115936114ff565b816040528381528660208588010111156115ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156115df57600080fd5b6115e7611515565b6115f08361135b565b815260208301356020820152604083013567ffffffffffffffff8082111561161757600080fd5b6116233683870161153f565b6040840152606085013591508082111561163c57600080fd5b6116483683870161153f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561169857600080fd5b6116a43682880161153f565b8385015250610140915081850135818111156116bf57600080fd5b6116cb3682880161153f565b8385015250505080915050919050565b6bffffffffffffffffffffffff1981358181169160148510156114f75760149490940360031b84901b1690921692915050565b60208152600061133b6020830184866113f9565b6060815261173c6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117646101c08501836111dc565b91506060870151605f19808685030160c087015261178284836111dc565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526117de87876111dc565b9650808c0151955050505080868503016101a0870152505061180082826111dc565b602085019690965250505060400152919050565b601f82111561185a57600081815260208120601f850160051c8101602086101561183b5750805b601f850160051c820191505b818110156109f857828155600101611847565b505050565b67ffffffffffffffff831115611877576118776114ff565b61188b836118858354611117565b83611814565b6000601f8411600181146118bf57600085156118a75750838201355b600019600387901b1c1916600186901b178355611919565b600083815260209020601f19861690835b828110156118f057868501358255602094850194600190920191016118d0565b508682101561190d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8035602083101561036757600019602084900360031b1b1692915050565b80820180821115610367576103676113d0565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156114f75760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xeB8206E02f6AB1884cfEa58CC7BabdA7d55aC957", + "initCode": "6101606040523480156200001257600080fd5b50604051620027dc380380620027dc83398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125606200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a7d01526000611acc01526000611aa701526000611a0001526000611a2a01526000611a5401526125606000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b60565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611be3565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c55565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611cce565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d68565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d85565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611dd8565b610e33565b34801561038a57600080fd5b5061039e610399366004611e01565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611e1c565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e93565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611f12565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e93565b6112aa565b34801561054157600080fd5b50610214610550366004611e01565b61139e565b34801561056157600080fd5b506102b7610570366004611fd0565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612061565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f9088908890889060040161209d565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066091906120c0565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120d9565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c959556906108499085908590600401612126565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a00610140860186612142565b610a0f91600491600091612188565b610a18916121b2565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a85866122ad565b9050600080610a976060890189612142565b610aa691600491600091612188565b610aaf916121b2565b90506001600160e01b03198416600003610b4757610acc886122ad565b9250610adc610140890189612142565b610aea916004908290612188565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a612142565b610bd5916004908290612188565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c60610140890189612142565b610c6f91602491601091612188565b610c78916123bb565b60601c91503660008181610c9985610c946101408f018f612142565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd49087908790600401612126565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123e9565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906120c0565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906120c0565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124db565b036110465761103c8786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193792505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196d92505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120d9565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a591906120c0565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a29086908690600401612126565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120d9565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612188565b6114d1916124f1565b9050876058886114e1848361250f565b926114ee93929190612188565b90955093506000888861150284605861250f565b9061150e85607861250f565b9261151b93929190612188565b611524916124f1565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612188565b61156d916124f1565b60001c8d8d60249060389261158493929190612188565b61158d916123bb565b60601c8b8b6040516115a0929190612522565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b604051602081830303815290604052805190602001206119a5565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d61163989607861250f565b90886116468b607861250f565b611650919061250f565b9261165d93929190612188565b6040518463ffffffff1660e01b815260040161167b9392919061209d565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906120c0565b60a06001600160601b038016901b8c8c6004906024926116de93929190612188565b6116e7916124f1565b16611864565b97508989836116fd86607861250f565b611707919061250f565b611712928290612188565b6040805160808101909152919650945080611731600a60048d8f612188565b61173a91612532565b60d01c81526020016117506010600a8d8f612188565b61175991612532565b60d01c815260200161176f603860248d8f612188565b611778916123bb565b60601c815260200161178e602460108d8f612188565b611797916123bb565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b611843878361250f565b9261185093929190612188565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60d083901c60a084901c65ffffffffffff81166000036118aa575065ffffffffffff5b60d084901c60a085901c65ffffffffffff81166000036118cd575065ffffffffffff5b8165ffffffffffff168465ffffffffffff1610156118e9578193505b8065ffffffffffff168365ffffffffffff161115611905578092505b60d08465ffffffffffff16901b60a08465ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b06119b26119f3565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a4c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b4057602081850181015186830182015201611b24565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611b1a565b6001600160a01b0381168114611b8857600080fd5b50565b8035611b9681611b73565b919050565b60008083601f840112611bad57600080fd5b5081356001600160401b03811115611bc457600080fd5b602083019150836020828501011115611bdc57600080fd5b9250929050565b600080600080600060808688031215611bfb57600080fd5b8535611c0681611b73565b94506020860135611c1681611b73565b93506040860135925060608601356001600160401b03811115611c3857600080fd5b611c4488828901611b9b565b969995985093965092949392505050565b600080600060408486031215611c6a57600080fd5b8335925060208401356001600160401b03811115611c8757600080fd5b611c9386828701611b9b565b9497909650939450505050565b80356001600160e01b031981168114611b9657600080fd5b803565ffffffffffff81168114611b9657600080fd5b600080600080600080600060c0888a031215611ce957600080fd5b611cf288611ca0565b96506020880135611d0281611b73565b95506040880135611d1281611b73565b9450611d2060608901611cb8565b9350611d2e60808901611cb8565b925060a08801356001600160401b03811115611d4957600080fd5b611d558a828b01611b9b565b989b979a50959850939692959293505050565b600060208284031215611d7a57600080fd5b81356106ed81611b73565b600080600060608486031215611d9a57600080fd5b83356001600160401b03811115611db057600080fd5b84016101608187031215611dc357600080fd5b95602085013595506040909401359392505050565b600060208284031215611dea57600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611e1357600080fd5b6106ed82611ca0565b600080600080600060808688031215611e3457600080fd5b8535611e3f81611b73565b94506020860135935060408601356001600160401b03811115611e6157600080fd5b611e6d88828901611b9b565b909450925050606086013560028110611e8557600080fd5b809150509295509295909350565b600080600060408486031215611ea857600080fd5b8335611eb381611b73565b925060208401356001600160401b03811115611c8757600080fd5b60008083601f840112611ee057600080fd5b5081356001600160401b03811115611ef757600080fd5b6020830191508360208260051b8501011115611bdc57600080fd5b60008060008060008060008060a0898b031215611f2e57600080fd5b8835611f3981611b73565b97506020890135611f4981611b73565b965060408901356001600160401b0380821115611f6557600080fd5b611f718c838d01611ece565b909850965060608b0135915080821115611f8a57600080fd5b611f968c838d01611ece565b909650945060808b0135915080821115611faf57600080fd5b50611fbc8b828c01611b9b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fe957600080fd5b8635611ff481611b73565b9550602087013561200481611b73565b9450604087013593506060870135925060808701356001600160401b0381111561202d57600080fd5b61203989828a01611b9b565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b061204b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006120b7604083018486612074565b95945050505050565b6000602082840312156120d257600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061213a602083018486612074565b949350505050565b6000808335601e1984360301811261215957600080fd5b8301803591506001600160401b0382111561217357600080fd5b602001915036819003821315611bdc57600080fd5b6000808585111561219857600080fd5b838611156121a557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121da5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171561221b5761221b6121e2565b60405290565b600082601f83011261223257600080fd5b81356001600160401b038082111561224c5761224c6121e2565b604051601f8301601f19908116603f01168101908282118183101715612274576122746121e2565b8160405283815286602085880101111561228d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061016082360312156122c057600080fd5b6122c86121f8565b6122d183611b8b565b81526020830135602082015260408301356001600160401b03808211156122f757600080fd5b61230336838701612221565b6040840152606085013591508082111561231c57600080fd5b61232836838701612221565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561237857600080fd5b61238436828801612221565b83850152506101409150818501358181111561239f57600080fd5b6123ab36828801612221565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121da5760149490940360031b84901b1690921692915050565b606081526124036060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a085015261242b6101c0850183611b1a565b91506060870151605f19808685030160c08701526124498483611b1a565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526124a58787611b1a565b9650808c0151955050505080868503016101a087015250506124c78282611b1a565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b061204b565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121da5760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x2e8c55abc96c5c8e25ae85bc75e48ca92d777f3762f17c77b97a693e69bb8287", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x54e89", + "value": "0x0", + "data": "0x60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x36" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xAf299A1f51560F51A1F3ADC0a5991Ac74b61b0BE", + "initCode": "60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b93925050505600000000000000000000000012358ca00141d09cb90253f05a1dd16be93a8ee6000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa2a4c692f4b80c93d24bc8128f0cc276619fa86aea99553ed35784c02175aa74", + "transactionIndex": "0x0", + "blockHash": "0x06f342d9946eaecdc306d197ab27a9f720ae81548c7120bdf14d55ed3aef2408", + "blockNumber": "0x2419989", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x3f6e5d", + "gasUsed": "0x3f6e5d", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x0000000000000000000000000000000000000000000000000016272ed00b13000000000000000000000000000000000000000000000000000e6ae0a233f263160000000000000000000000000000000000000000000032fcd83473677dacbdc50000000000000000000000000000000000000000000000000e54b97363e750160000000000000000000000000000000000000000000032fcd84a9a964db7d0c5", + "blockHash": "0x06f342d9946eaecdc306d197ab27a9f720ae81548c7120bdf14d55ed3aef2408", + "blockNumber": "0x2419989", + "transactionHash": "0xa2a4c692f4b80c93d24bc8128f0cc276619fa86aea99553ed35784c02175aa74", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f11" + }, + { + "transactionHash": "0x2e8c55abc96c5c8e25ae85bc75e48ca92d777f3762f17c77b97a693e69bb8287", + "transactionIndex": "0x1", + "blockHash": "0x06f342d9946eaecdc306d197ab27a9f720ae81548c7120bdf14d55ed3aef2408", + "blockNumber": "0x2419989", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x4345ec", + "gasUsed": "0x3d78f", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x00000000000000000000000000000000000000000000000000015780fdab41000000000000000000000000000000000000000000000000000e54b9735fb0fbe90000000000000000000000000000000000000000000032fcd84a9a964db7d0c50000000000000000000000000000000000000000000000000e5361f26205bae90000000000000000000000000000000000000000000032fcd84bf2174b6311c5", + "blockHash": "0x06f342d9946eaecdc306d197ab27a9f720ae81548c7120bdf14d55ed3aef2408", + "blockNumber": "0x2419989", + "transactionHash": "0x2e8c55abc96c5c8e25ae85bc75e48ca92d777f3762f17c77b97a693e69bb8287", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f11" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1689176015, + "chain": 80001, + "multi": false, + "commit": "ccc01a6" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1690749002.json b/broadcast/DeployKernel.s.sol/80001/run-1690749002.json new file mode 100644 index 00000000..57df86e2 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1690749002.json @@ -0,0 +1,122 @@ +{ + "transactions": [ + { + "hash": "0xbb3a20da81d9d752f3e88c3acf252ba87b63cc472bc224b12c1f2075fb850851", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x7541a", + "value": "0x0", + "data": "0x6080806040523461001657610550908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c806319d9363c146102c55780634c96a3891461024e5780635414dff014610201578063ade809051461014f578063db4c545e146101215763e919e3ea1461006257600080fd5b8060031936011261011d5761007561038b565b602435928360601c80331490151715610112576100906103d4565b9360896013860187f59384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b84903d156100fb57503d81803e3d90fd5b63301164258252601cfd5b5063301164258552601cfd5b632f6348368552601cfd5b8280fd5b83823461014b578160031936011261014b57602090608960136101426103d4565b01209051908152f35b5080fd5b508060031936011261011d5761016361038b565b60243567ffffffffffffffff81116101fd5761018290369085016103a6565b61018d9491946103d4565b9060896013830188f09586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b8363301164258952601cfd5b8480fd5b5082903461014b57602036600319011261014b57602092608960136102246103d4565b012060ff84536035523060601b600152356015526055822091603552519060018060a01b03168152f35b50602036600319011261011d5761026361038b565b61026b6103d4565b9260896013850186f09384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b50606036600319011261011d576102da61038b565b6024359260443567ffffffffffffffff8111610387576102fd90369083016103a6565b8560609692961c8033149015171561037b576103176103d4565b9160896013840189f59586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b82632f6348368852601cfd5b8580fd5b600435906001600160a01b03821682036103a157565b600080fd5b9181601f840112156103a15782359167ffffffffffffffff83116103a157602083818601950101116103a157565b604051903060701c1561047857666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d825256fe09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "nonce": "0x39" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x61D48C31C95C7d5a7C567b38061a9fd52E1a3D97", + "initCode": "6080806040523461001657610550908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c806319d9363c146102c55780634c96a3891461024e5780635414dff014610201578063ade809051461014f578063db4c545e146101215763e919e3ea1461006257600080fd5b8060031936011261011d5761007561038b565b602435928360601c80331490151715610112576100906103d4565b9360896013860187f59384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b84903d156100fb57503d81803e3d90fd5b63301164258252601cfd5b5063301164258552601cfd5b632f6348368552601cfd5b8280fd5b83823461014b578160031936011261014b57602090608960136101426103d4565b01209051908152f35b5080fd5b508060031936011261011d5761016361038b565b60243567ffffffffffffffff81116101fd5761018290369085016103a6565b61018d9491946103d4565b9060896013830188f09586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b8363301164258952601cfd5b8480fd5b5082903461014b57602036600319011261014b57602092608960136102246103d4565b012060ff84536035523060601b600152356015526055822091603552519060018060a01b03168152f35b50602036600319011261011d5761026361038b565b61026b6103d4565b9260896013850186f09384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b50606036600319011261011d576102da61038b565b6024359260443567ffffffffffffffff8111610387576102fd90369083016103a6565b8560609692961c8033149015171561037b576103176103d4565b9160896013840189f59586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b82632f6348368852601cfd5b8580fd5b600435906001600160a01b03821682036103a157565b600080fd5b9181601f840112156103a15782359167ffffffffffffffff83116103a157602083818601950101116103a157565b604051903060701c1561047857666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d825256fe09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xf9988164183bf47b6ed3453c83f51fbb0f979c8d65fd927bb2c8a4558b4b9685", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x2bc818", + "value": "0x0", + "data": "0x60e0346100f9576001600160401b0390601f61265638819003918201601f1916830191848311848410176100e35780849260409485528339810103126100f9578051906001600160a01b039081831683036100f95760200151908116918282036100f95760805260c052604051916120ed90818401908111848210176100e3576020928492610569843981520301906000f080156100d75760a05260405161046a90816100ff8239608051818181606c015281816101ee01526102df015260a0518181816101900152610356015260c0518160b30152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040818152600436101561001457600080fd5b600091823560e01c908163037637aa14610342575080631bb12e6914610276578063296601cd146100e2578063b0d691fe1461009f5763f961ea491461005957600080fd5b3461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b503461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160601b0383836100f536610385565b849391945192602097889363347d5e2560e21b8587015260018060a01b039788821660248801528760448801528060648801526101796084948281878b01378b86848b01015261016d601f199761015e888c8b601f8901168101038d606482019052018c6103eb565b8b519485938b85019788610423565b038681018352826103eb565b519020169185519485936306764d8f60e21b8552887f0000000000000000000000000000000000000000000000000000000000000000166004860152602485015260606044850152805190816064860152858a5b83811061025f5750505090601f828a858795860101520116810103018187877f0000000000000000000000000000000000000000000000000000000000000000165af19384156102545793610225575b505191168152f35b610246919350843d861161024d575b61023e81836103eb565b81019061044b565b918461021d565b503d610234565b8251903d90823e3d90fd5b8281018201518982018701528896508791016101cd565b503461009b576001600160601b036102b76102a961029336610385565b8795939594919451948593602085019788610423565b03601f1981018352826103eb565b51902082516305414dff60e41b815291166004820152906001600160a01b03906020836024817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610338576020949361031957505191168152f35b610331919350843d811161024d5761023e81836103eb565b913861021d565b81513d86823e3d90fd5b83903461009b578160031936011261009b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60606003198201126103e6576004356001600160a01b03811681036103e6579160243567ffffffffffffffff928382116103e657806023830112156103e65781600401359384116103e657602484830101116103e657602401919060443590565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761040d57604052565b634e487b7160e01b600052604160045260246000fd5b90928092603495946001600160601b03199060601b1683526014830137019060148201520190565b908160209103126103e657516001600160a01b03811681036103e657905661014034620001b057601f620020ed38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611f019283620001ec8439608051836119cb015260a051836119ee015260c05183611a60015260e05183611a86015251826119aa0152518181816104b101528181610673015281816107880152818161091501528181610a4c01528181610c6f01528181610d9001528181610ea301528181610fcd01526113f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b36610fb057005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f57806394e2c9e31461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e57610f1e565b610e8c565b610ddc565b610d5d565b610cce565b610c59565b610c30565b610bfb565b610b53565b610b1c565b610a36565b6109de565b6108cc565b610803565b61073f565b6106f5565b61064f565b610443565b6103b1565b610357565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b3461018557600036600319011261018557600080516020611ee18339815191525460405160509190911c6001600160a01b03168152602090f35b6001600160a01b0381160361018557565b359061021c8261030e565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761037360043561030e565b61037e60243561030e565b6064356001600160401b0381116101855761039d90369060040161032a565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103ef6103e6602092369060040161032a565b90600435611abc565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c036600319011261018557610457610402565b602435906104648261030e565b604435906104718261030e565b610479610419565b9261048261042e565b9060a4356001600160401b038111610185576104a290369060040161032a565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610645575b61063357849261050f6105a6926105006104f261020f565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261053687610f78565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105d06000998a94600484016112e5565b038183895af1801561062e57610615575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610622610628926101a0565b8061017a565b386105e1565b6112f6565b604051637046c88d60e01b8152600490fd5b50303314156104da565b6020366003190112610185576004356106678161030e565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106eb575b61063357807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561069c565b60031960603682011261018557600435906001600160401b038211610185576101609082360301126101855761073760209160443590602435906004016113e1565b604051908152f35b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d5575b506040519081529081906020820190565b6107f6915060203d81116107fc575b6107ee81836101ee565b810190611302565b386107c4565b503d6107e4565b34610185576020366003190112610185576102d0610848610822610402565b60006060604051610832816101b8565b8281528260208201528260408201520152610f78565b60405190610855826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b6080366003190112610185576004356108e48161030e565b6044356001600160401b0381116101855761090390369060040161032a565b919060643592600284101561018557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806109a8575b61063357600191610957913691611029565b926109618161106f565b036109875760008281939260208394519201905af43d82803e15610983573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610983573d90f35b506109b86109b4611c7b565b1590565b610945565b604051906109ca826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc6109bd565b90604060031983011261018557600435610a138161030e565b91602435906001600160401b03821161018557610a329160040161032a565b9091565b610a3f366109fa565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610b12575b6106335780600080516020611ee18339815191525460501c1691610a9881611df4565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b03925af1801561062e57610afe575080f35b80610622610b0b926101a0565b80f35b8380fd5b5030331415610a75565b34610185576000366003190112610185576020600080516020611ee18339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610ba9610b6f61023e565b610b776109bd565b90604051928392600f60f81b8452610b9b60209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610be457505050500390f35b835185528695509381019392810192600101610bd5565b34610185576000366003190112610185576020600080516020611ee18339815191525465ffffffffffff60405191831c168152f35b34610185576000366003190112610185576000546040516001600160a01b039091168152602090f35b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610cea60043561030e565b610cf560243561030e565b6001600160401b0360443581811161018557610d15903690600401610c9e565b505060643581811161018557610d2f903690600401610c9e565b505060843590811161018557610d4990369060040161032a565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d557506040519081529081906020820190565b610de5366109fa565b600080516020611ee18339815191525490926001600160a01b03918290610e189060501c82165b6001600160a01b031690565b16610e7b57610e2681611df4565b169160405191600093849281847fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8180a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b60405162dc149f60e41b8152600490fd5b602036600319011261018557610ea0610402565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610f14575b61063357600080516020611ee183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610ed3565b346101855760a036600319011261018557610f3a60043561030e565b610f4560243561030e565b6084356001600160401b03811161018557610f6490369060040161032a565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b6000610fc681356001600160e01b031916610f78565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061101a575b61063357818091368280378136915af43d82803e15610983573d90f35b50611023611c7b565b15610ffd565b9291926001600160401b0382116101b35760405191611052601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b6002111561107957565b634e487b7160e01b600052602160045260246000fd5b903590601e198136030182121561018557018035906001600160401b0382116101855760200191813603831361018557565b906004116101855790600490565b906024116101855760100190601490565b909291928360041161018557831161018557600401916003190190565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b0319903581811693926004811061118757505050565b60040360031b82901b16169150565b9080601f83011215610185578160206111b193359101611029565b90565b919061016083820312610185576111c961021e565b926111d38161031f565b8452602081013560208501526040810135916001600160401b03928381116101855781611201918401611196565b60408601526060820135838111610185578161121e918401611196565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101855782611270918501611196565b9086015261014092838301359081116101855761128d9201611196565b90830152565b6bffffffffffffffffffffffff1990358181169392601481106112b557505050565b60140360031b82901b16169150565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206111b19381815201916112c4565b6040513d6000823e3d90fd5b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916113d7906020810151608084015283810151611356610160918260a08701526101c0860190610260565b906113c4611376606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6000926001600160a01b039284927f0000000000000000000000000000000000000000000000000000000000000000851633036116d957610140948582019161143c611436611430858461108f565b906110c1565b9061116a565b9663ffffffff60e01b93600080516020611ee18339815191529285611462855460e01b90565b8b16166116c7578a9561147536836111b4565b9a168061152d5750926020979694926114aa6114a361149c6114be956114e39e9a9861108f565b80916110e0565b3691611029565b908701525460501c6001600160a01b031690565b935b8561151f575b604051633a871cdd60e01b81529889968795869360048501611311565b0393165af191821561062e576111b193926114ff575b50611e41565b61151891925060203d81116107fc576107ee81836101ee565b90386114f9565b8280808089335af1506114c6565b9798509296600160e01b81036115d65750916114e398979593916020979593611567611562611436611430606087018761108f565b610f78565b60018101549093906001600160a01b031697858916156115bf575b5061149c611593926114a39261108f565b9089015254607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617966114c0565b5460501c6001600160a01b0316975061149c611582565b919795939650919350600160e11b146000146116ba5761163b90611635611606611436611430606088018861108f565b9161162f610e0c61162961162361161d858b61108f565b906110cf565b90611293565b60601c90565b9561108f565b9161174b565b97939992989190999884871690813b156116b657918c91611676969594938360405180998195829463064acaab60e11b8452600484016112e5565b03925af1801561062e576114e39a6020998d9661169a936116a3575b503691611029565b908201526114c0565b806106226116b0926101a0565b38611692565b8c80fd5b5050505050505050600190565b60405163fc2f51c560e01b8152600490fd5b604051636b31ba1560e11b8152600490fd5b3590602081106116f9575090565b6000199060200360031b1b1690565b6040906111b19492815281602082015201916112c4565b6001600160d01b0319903581811693926006811061173c57505050565b60060360031b82901b16169150565b90929161175881856110fd565b611761916116eb565b9360588101938593607887019384886058019061177f918387611152565b611788916116eb565b611792828661110e565b61179b916116eb565b986117a6838761111f565b6117af91611293565b60601c906117be36828c611029565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198a1692820192909252606081019e909e526001600160a01b039490941660808e015260a0808e01919091528c529a8b929061183660c0826101ee565b519020611842906119a8565b600080516020611ee18339815191525490939060501c6001600160a01b03169101976078890161187391868a611152565b60405163199ed7c960e11b81529485939284928392611896929060048501611708565b03915afa92831561062e576115626118dc61021c956105369460009161198b575b506118d56118c5878b61110e565b6001600160a01b031992916116eb565b1690611e41565b9a61197b8561196b60788c8c01019b607719908303019a611942610e0c61162961162361192b61192561191f6119186116296116238c8b61111f565b9988611130565b9061171f565b60d01c90565b9c61193c61192561191f8389611141565b956110cf565b9461195c61194e61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6119a291508d803d106107fc576107ee81836101ee565b386118b7565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611a35575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611a16565b600080516020611ee18339815191525460405163199ed7c960e11b81526001600160a01b03949093602093859360501c87169284928392611b0292919060048501611708565b03915afa801561062e57611b1e91600091611b8f575b50611bad565b60208101514265ffffffffffff90911611611b805742611b55611b4a604084015165ffffffffffff1690565b65ffffffffffff1690565b10611b8057516001600160a01b031616611b7457630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b0319919050565b611ba7915060203d81116107fc576107ee81836101ee565b38611b18565b604080516001600160401b03929060608101848111828210176101b35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611c22575b83519460608601908111868210176101b35784526001600160a01b038116855260d01c6020850152169082015290565b829150611bf2565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611ee183398151915254604051639ea9bd5960e01b8082526020926001600160a01b0392908490829060501c85168180611cbf363360048401611c42565b03915afa90811561062e57600091611dd7575b50611dcf57611cec6000356001600160e01b031916610f78565b6001810154611d03906001600160a01b0316610e0c565b92831615908115611d9a575b8115611d7b575b5015611d2457505050600090565b829060405192839182528180611d3e363360048401611c42565b03915afa91821561062e57600092611d5557505090565b6111b19250803d10611d74575b611d6c81836101ee565b810190611c2a565b503d611d62565b5460301c65ffffffffffff16905065ffffffffffff4291161138611d16565b905065ffffffffffff611db3825465ffffffffffff1690565b168015159081611dc5575b5090611d0f565b9050421138611dbe565b505050600190565b611dee9150843d8611611d7457611d6c81836101ee565b38611cd2565b600080516020611ee183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b906001600160a01b03808316919081168203611dcf578260d01c9065ffffffffffff809460a01c16938415611ed8575b808260d01c9260a01c16918215611ecf575b808410611ec7575b5080821690851611611ebf575b5060a09290921b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b925038611e98565b925038611e8b565b91508091611e83565b935083611e7156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd900000000000000000000000061d48c31c95c7d5a7c567b38061a9fd52e1a3d970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x88546cc16eC33FD449fa929Fb8ac900793018784", + "initCode": "60e0346100f9576001600160401b0390601f61265638819003918201601f1916830191848311848410176100e35780849260409485528339810103126100f9578051906001600160a01b039081831683036100f95760200151908116918282036100f95760805260c052604051916120ed90818401908111848210176100e3576020928492610569843981520301906000f080156100d75760a05260405161046a90816100ff8239608051818181606c015281816101ee01526102df015260a0518181816101900152610356015260c0518160b30152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040818152600436101561001457600080fd5b600091823560e01c908163037637aa14610342575080631bb12e6914610276578063296601cd146100e2578063b0d691fe1461009f5763f961ea491461005957600080fd5b3461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b503461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160601b0383836100f536610385565b849391945192602097889363347d5e2560e21b8587015260018060a01b039788821660248801528760448801528060648801526101796084948281878b01378b86848b01015261016d601f199761015e888c8b601f8901168101038d606482019052018c6103eb565b8b519485938b85019788610423565b038681018352826103eb565b519020169185519485936306764d8f60e21b8552887f0000000000000000000000000000000000000000000000000000000000000000166004860152602485015260606044850152805190816064860152858a5b83811061025f5750505090601f828a858795860101520116810103018187877f0000000000000000000000000000000000000000000000000000000000000000165af19384156102545793610225575b505191168152f35b610246919350843d861161024d575b61023e81836103eb565b81019061044b565b918461021d565b503d610234565b8251903d90823e3d90fd5b8281018201518982018701528896508791016101cd565b503461009b576001600160601b036102b76102a961029336610385565b8795939594919451948593602085019788610423565b03601f1981018352826103eb565b51902082516305414dff60e41b815291166004820152906001600160a01b03906020836024817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610338576020949361031957505191168152f35b610331919350843d811161024d5761023e81836103eb565b913861021d565b81513d86823e3d90fd5b83903461009b578160031936011261009b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60606003198201126103e6576004356001600160a01b03811681036103e6579160243567ffffffffffffffff928382116103e657806023830112156103e65781600401359384116103e657602484830101116103e657602401919060443590565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761040d57604052565b634e487b7160e01b600052604160045260246000fd5b90928092603495946001600160601b03199060601b1683526014830137019060148201520190565b908160209103126103e657516001600160a01b03811681036103e657905661014034620001b057601f620020ed38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611f019283620001ec8439608051836119cb015260a051836119ee015260c05183611a60015260e05183611a86015251826119aa0152518181816104b101528181610673015281816107880152818161091501528181610a4c01528181610c6f01528181610d9001528181610ea301528181610fcd01526113f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b36610fb057005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f57806394e2c9e31461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e57610f1e565b610e8c565b610ddc565b610d5d565b610cce565b610c59565b610c30565b610bfb565b610b53565b610b1c565b610a36565b6109de565b6108cc565b610803565b61073f565b6106f5565b61064f565b610443565b6103b1565b610357565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b3461018557600036600319011261018557600080516020611ee18339815191525460405160509190911c6001600160a01b03168152602090f35b6001600160a01b0381160361018557565b359061021c8261030e565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761037360043561030e565b61037e60243561030e565b6064356001600160401b0381116101855761039d90369060040161032a565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103ef6103e6602092369060040161032a565b90600435611abc565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c036600319011261018557610457610402565b602435906104648261030e565b604435906104718261030e565b610479610419565b9261048261042e565b9060a4356001600160401b038111610185576104a290369060040161032a565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610645575b61063357849261050f6105a6926105006104f261020f565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261053687610f78565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105d06000998a94600484016112e5565b038183895af1801561062e57610615575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610622610628926101a0565b8061017a565b386105e1565b6112f6565b604051637046c88d60e01b8152600490fd5b50303314156104da565b6020366003190112610185576004356106678161030e565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106eb575b61063357807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561069c565b60031960603682011261018557600435906001600160401b038211610185576101609082360301126101855761073760209160443590602435906004016113e1565b604051908152f35b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d5575b506040519081529081906020820190565b6107f6915060203d81116107fc575b6107ee81836101ee565b810190611302565b386107c4565b503d6107e4565b34610185576020366003190112610185576102d0610848610822610402565b60006060604051610832816101b8565b8281528260208201528260408201520152610f78565b60405190610855826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b6080366003190112610185576004356108e48161030e565b6044356001600160401b0381116101855761090390369060040161032a565b919060643592600284101561018557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806109a8575b61063357600191610957913691611029565b926109618161106f565b036109875760008281939260208394519201905af43d82803e15610983573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610983573d90f35b506109b86109b4611c7b565b1590565b610945565b604051906109ca826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc6109bd565b90604060031983011261018557600435610a138161030e565b91602435906001600160401b03821161018557610a329160040161032a565b9091565b610a3f366109fa565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610b12575b6106335780600080516020611ee18339815191525460501c1691610a9881611df4565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b03925af1801561062e57610afe575080f35b80610622610b0b926101a0565b80f35b8380fd5b5030331415610a75565b34610185576000366003190112610185576020600080516020611ee18339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610ba9610b6f61023e565b610b776109bd565b90604051928392600f60f81b8452610b9b60209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610be457505050500390f35b835185528695509381019392810192600101610bd5565b34610185576000366003190112610185576020600080516020611ee18339815191525465ffffffffffff60405191831c168152f35b34610185576000366003190112610185576000546040516001600160a01b039091168152602090f35b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610cea60043561030e565b610cf560243561030e565b6001600160401b0360443581811161018557610d15903690600401610c9e565b505060643581811161018557610d2f903690600401610c9e565b505060843590811161018557610d4990369060040161032a565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d557506040519081529081906020820190565b610de5366109fa565b600080516020611ee18339815191525490926001600160a01b03918290610e189060501c82165b6001600160a01b031690565b16610e7b57610e2681611df4565b169160405191600093849281847fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8180a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b60405162dc149f60e41b8152600490fd5b602036600319011261018557610ea0610402565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610f14575b61063357600080516020611ee183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610ed3565b346101855760a036600319011261018557610f3a60043561030e565b610f4560243561030e565b6084356001600160401b03811161018557610f6490369060040161032a565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b6000610fc681356001600160e01b031916610f78565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061101a575b61063357818091368280378136915af43d82803e15610983573d90f35b50611023611c7b565b15610ffd565b9291926001600160401b0382116101b35760405191611052601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b6002111561107957565b634e487b7160e01b600052602160045260246000fd5b903590601e198136030182121561018557018035906001600160401b0382116101855760200191813603831361018557565b906004116101855790600490565b906024116101855760100190601490565b909291928360041161018557831161018557600401916003190190565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b0319903581811693926004811061118757505050565b60040360031b82901b16169150565b9080601f83011215610185578160206111b193359101611029565b90565b919061016083820312610185576111c961021e565b926111d38161031f565b8452602081013560208501526040810135916001600160401b03928381116101855781611201918401611196565b60408601526060820135838111610185578161121e918401611196565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101855782611270918501611196565b9086015261014092838301359081116101855761128d9201611196565b90830152565b6bffffffffffffffffffffffff1990358181169392601481106112b557505050565b60140360031b82901b16169150565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206111b19381815201916112c4565b6040513d6000823e3d90fd5b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916113d7906020810151608084015283810151611356610160918260a08701526101c0860190610260565b906113c4611376606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6000926001600160a01b039284927f0000000000000000000000000000000000000000000000000000000000000000851633036116d957610140948582019161143c611436611430858461108f565b906110c1565b9061116a565b9663ffffffff60e01b93600080516020611ee18339815191529285611462855460e01b90565b8b16166116c7578a9561147536836111b4565b9a168061152d5750926020979694926114aa6114a361149c6114be956114e39e9a9861108f565b80916110e0565b3691611029565b908701525460501c6001600160a01b031690565b935b8561151f575b604051633a871cdd60e01b81529889968795869360048501611311565b0393165af191821561062e576111b193926114ff575b50611e41565b61151891925060203d81116107fc576107ee81836101ee565b90386114f9565b8280808089335af1506114c6565b9798509296600160e01b81036115d65750916114e398979593916020979593611567611562611436611430606087018761108f565b610f78565b60018101549093906001600160a01b031697858916156115bf575b5061149c611593926114a39261108f565b9089015254607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617966114c0565b5460501c6001600160a01b0316975061149c611582565b919795939650919350600160e11b146000146116ba5761163b90611635611606611436611430606088018861108f565b9161162f610e0c61162961162361161d858b61108f565b906110cf565b90611293565b60601c90565b9561108f565b9161174b565b97939992989190999884871690813b156116b657918c91611676969594938360405180998195829463064acaab60e11b8452600484016112e5565b03925af1801561062e576114e39a6020998d9661169a936116a3575b503691611029565b908201526114c0565b806106226116b0926101a0565b38611692565b8c80fd5b5050505050505050600190565b60405163fc2f51c560e01b8152600490fd5b604051636b31ba1560e11b8152600490fd5b3590602081106116f9575090565b6000199060200360031b1b1690565b6040906111b19492815281602082015201916112c4565b6001600160d01b0319903581811693926006811061173c57505050565b60060360031b82901b16169150565b90929161175881856110fd565b611761916116eb565b9360588101938593607887019384886058019061177f918387611152565b611788916116eb565b611792828661110e565b61179b916116eb565b986117a6838761111f565b6117af91611293565b60601c906117be36828c611029565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198a1692820192909252606081019e909e526001600160a01b039490941660808e015260a0808e01919091528c529a8b929061183660c0826101ee565b519020611842906119a8565b600080516020611ee18339815191525490939060501c6001600160a01b03169101976078890161187391868a611152565b60405163199ed7c960e11b81529485939284928392611896929060048501611708565b03915afa92831561062e576115626118dc61021c956105369460009161198b575b506118d56118c5878b61110e565b6001600160a01b031992916116eb565b1690611e41565b9a61197b8561196b60788c8c01019b607719908303019a611942610e0c61162961162361192b61192561191f6119186116296116238c8b61111f565b9988611130565b9061171f565b60d01c90565b9c61193c61192561191f8389611141565b956110cf565b9461195c61194e61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6119a291508d803d106107fc576107ee81836101ee565b386118b7565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611a35575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611a16565b600080516020611ee18339815191525460405163199ed7c960e11b81526001600160a01b03949093602093859360501c87169284928392611b0292919060048501611708565b03915afa801561062e57611b1e91600091611b8f575b50611bad565b60208101514265ffffffffffff90911611611b805742611b55611b4a604084015165ffffffffffff1690565b65ffffffffffff1690565b10611b8057516001600160a01b031616611b7457630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b0319919050565b611ba7915060203d81116107fc576107ee81836101ee565b38611b18565b604080516001600160401b03929060608101848111828210176101b35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611c22575b83519460608601908111868210176101b35784526001600160a01b038116855260d01c6020850152169082015290565b829150611bf2565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611ee183398151915254604051639ea9bd5960e01b8082526020926001600160a01b0392908490829060501c85168180611cbf363360048401611c42565b03915afa90811561062e57600091611dd7575b50611dcf57611cec6000356001600160e01b031916610f78565b6001810154611d03906001600160a01b0316610e0c565b92831615908115611d9a575b8115611d7b575b5015611d2457505050600090565b829060405192839182528180611d3e363360048401611c42565b03915afa91821561062e57600092611d5557505090565b6111b19250803d10611d74575b611d6c81836101ee565b810190611c2a565b503d611d62565b5460301c65ffffffffffff16905065ffffffffffff4291161138611d16565b905065ffffffffffff611db3825465ffffffffffff1690565b168015159081611dc5575b5090611d0f565b9050421138611dbe565b505050600190565b611dee9150843d8611611d7457611d6c81836101ee565b38611cd2565b600080516020611ee183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b906001600160a01b03808316919081168203611dcf578260d01c9065ffffffffffff809460a01c16938415611ed8575b808260d01c9260a01c16918215611ecf575b808410611ec7575b5080821690851611611ebf575b5060a09290921b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b925038611e98565b925038611e8b565b91508091611e83565b935083611e7156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd900000000000000000000000061d48c31c95c7d5a7c567b38061a9fd52e1a3d970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xdf89afDD53c813B645928a66594F2b841Da38BEA", + "initCode": "61014034620001b057601f620020ed38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611f019283620001ec8439608051836119cb015260a051836119ee015260c05183611a60015260e05183611a86015251826119aa0152518181816104b101528181610673015281816107880152818161091501528181610a4c01528181610c6f01528181610d9001528181610ea301528181610fcd01526113f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b36610fb057005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f57806394e2c9e31461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e57610f1e565b610e8c565b610ddc565b610d5d565b610cce565b610c59565b610c30565b610bfb565b610b53565b610b1c565b610a36565b6109de565b6108cc565b610803565b61073f565b6106f5565b61064f565b610443565b6103b1565b610357565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b3461018557600036600319011261018557600080516020611ee18339815191525460405160509190911c6001600160a01b03168152602090f35b6001600160a01b0381160361018557565b359061021c8261030e565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761037360043561030e565b61037e60243561030e565b6064356001600160401b0381116101855761039d90369060040161032a565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103ef6103e6602092369060040161032a565b90600435611abc565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c036600319011261018557610457610402565b602435906104648261030e565b604435906104718261030e565b610479610419565b9261048261042e565b9060a4356001600160401b038111610185576104a290369060040161032a565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610645575b61063357849261050f6105a6926105006104f261020f565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261053687610f78565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105d06000998a94600484016112e5565b038183895af1801561062e57610615575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610622610628926101a0565b8061017a565b386105e1565b6112f6565b604051637046c88d60e01b8152600490fd5b50303314156104da565b6020366003190112610185576004356106678161030e565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106eb575b61063357807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561069c565b60031960603682011261018557600435906001600160401b038211610185576101609082360301126101855761073760209160443590602435906004016113e1565b604051908152f35b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d5575b506040519081529081906020820190565b6107f6915060203d81116107fc575b6107ee81836101ee565b810190611302565b386107c4565b503d6107e4565b34610185576020366003190112610185576102d0610848610822610402565b60006060604051610832816101b8565b8281528260208201528260408201520152610f78565b60405190610855826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b6080366003190112610185576004356108e48161030e565b6044356001600160401b0381116101855761090390369060040161032a565b919060643592600284101561018557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806109a8575b61063357600191610957913691611029565b926109618161106f565b036109875760008281939260208394519201905af43d82803e15610983573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610983573d90f35b506109b86109b4611c7b565b1590565b610945565b604051906109ca826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc6109bd565b90604060031983011261018557600435610a138161030e565b91602435906001600160401b03821161018557610a329160040161032a565b9091565b610a3f366109fa565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610b12575b6106335780600080516020611ee18339815191525460501c1691610a9881611df4565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b03925af1801561062e57610afe575080f35b80610622610b0b926101a0565b80f35b8380fd5b5030331415610a75565b34610185576000366003190112610185576020600080516020611ee18339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610ba9610b6f61023e565b610b776109bd565b90604051928392600f60f81b8452610b9b60209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610be457505050500390f35b835185528695509381019392810192600101610bd5565b34610185576000366003190112610185576020600080516020611ee18339815191525465ffffffffffff60405191831c168152f35b34610185576000366003190112610185576000546040516001600160a01b039091168152602090f35b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610cea60043561030e565b610cf560243561030e565b6001600160401b0360443581811161018557610d15903690600401610c9e565b505060643581811161018557610d2f903690600401610c9e565b505060843590811161018557610d4990369060040161032a565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d557506040519081529081906020820190565b610de5366109fa565b600080516020611ee18339815191525490926001600160a01b03918290610e189060501c82165b6001600160a01b031690565b16610e7b57610e2681611df4565b169160405191600093849281847fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8180a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b60405162dc149f60e41b8152600490fd5b602036600319011261018557610ea0610402565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610f14575b61063357600080516020611ee183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610ed3565b346101855760a036600319011261018557610f3a60043561030e565b610f4560243561030e565b6084356001600160401b03811161018557610f6490369060040161032a565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b6000610fc681356001600160e01b031916610f78565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061101a575b61063357818091368280378136915af43d82803e15610983573d90f35b50611023611c7b565b15610ffd565b9291926001600160401b0382116101b35760405191611052601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b6002111561107957565b634e487b7160e01b600052602160045260246000fd5b903590601e198136030182121561018557018035906001600160401b0382116101855760200191813603831361018557565b906004116101855790600490565b906024116101855760100190601490565b909291928360041161018557831161018557600401916003190190565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b0319903581811693926004811061118757505050565b60040360031b82901b16169150565b9080601f83011215610185578160206111b193359101611029565b90565b919061016083820312610185576111c961021e565b926111d38161031f565b8452602081013560208501526040810135916001600160401b03928381116101855781611201918401611196565b60408601526060820135838111610185578161121e918401611196565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101855782611270918501611196565b9086015261014092838301359081116101855761128d9201611196565b90830152565b6bffffffffffffffffffffffff1990358181169392601481106112b557505050565b60140360031b82901b16169150565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206111b19381815201916112c4565b6040513d6000823e3d90fd5b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916113d7906020810151608084015283810151611356610160918260a08701526101c0860190610260565b906113c4611376606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6000926001600160a01b039284927f0000000000000000000000000000000000000000000000000000000000000000851633036116d957610140948582019161143c611436611430858461108f565b906110c1565b9061116a565b9663ffffffff60e01b93600080516020611ee18339815191529285611462855460e01b90565b8b16166116c7578a9561147536836111b4565b9a168061152d5750926020979694926114aa6114a361149c6114be956114e39e9a9861108f565b80916110e0565b3691611029565b908701525460501c6001600160a01b031690565b935b8561151f575b604051633a871cdd60e01b81529889968795869360048501611311565b0393165af191821561062e576111b193926114ff575b50611e41565b61151891925060203d81116107fc576107ee81836101ee565b90386114f9565b8280808089335af1506114c6565b9798509296600160e01b81036115d65750916114e398979593916020979593611567611562611436611430606087018761108f565b610f78565b60018101549093906001600160a01b031697858916156115bf575b5061149c611593926114a39261108f565b9089015254607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617966114c0565b5460501c6001600160a01b0316975061149c611582565b919795939650919350600160e11b146000146116ba5761163b90611635611606611436611430606088018861108f565b9161162f610e0c61162961162361161d858b61108f565b906110cf565b90611293565b60601c90565b9561108f565b9161174b565b97939992989190999884871690813b156116b657918c91611676969594938360405180998195829463064acaab60e11b8452600484016112e5565b03925af1801561062e576114e39a6020998d9661169a936116a3575b503691611029565b908201526114c0565b806106226116b0926101a0565b38611692565b8c80fd5b5050505050505050600190565b60405163fc2f51c560e01b8152600490fd5b604051636b31ba1560e11b8152600490fd5b3590602081106116f9575090565b6000199060200360031b1b1690565b6040906111b19492815281602082015201916112c4565b6001600160d01b0319903581811693926006811061173c57505050565b60060360031b82901b16169150565b90929161175881856110fd565b611761916116eb565b9360588101938593607887019384886058019061177f918387611152565b611788916116eb565b611792828661110e565b61179b916116eb565b986117a6838761111f565b6117af91611293565b60601c906117be36828c611029565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198a1692820192909252606081019e909e526001600160a01b039490941660808e015260a0808e01919091528c529a8b929061183660c0826101ee565b519020611842906119a8565b600080516020611ee18339815191525490939060501c6001600160a01b03169101976078890161187391868a611152565b60405163199ed7c960e11b81529485939284928392611896929060048501611708565b03915afa92831561062e576115626118dc61021c956105369460009161198b575b506118d56118c5878b61110e565b6001600160a01b031992916116eb565b1690611e41565b9a61197b8561196b60788c8c01019b607719908303019a611942610e0c61162961162361192b61192561191f6119186116296116238c8b61111f565b9988611130565b9061171f565b60d01c90565b9c61193c61192561191f8389611141565b956110cf565b9461195c61194e61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6119a291508d803d106107fc576107ee81836101ee565b386118b7565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611a35575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611a16565b600080516020611ee18339815191525460405163199ed7c960e11b81526001600160a01b03949093602093859360501c87169284928392611b0292919060048501611708565b03915afa801561062e57611b1e91600091611b8f575b50611bad565b60208101514265ffffffffffff90911611611b805742611b55611b4a604084015165ffffffffffff1690565b65ffffffffffff1690565b10611b8057516001600160a01b031616611b7457630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b0319919050565b611ba7915060203d81116107fc576107ee81836101ee565b38611b18565b604080516001600160401b03929060608101848111828210176101b35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611c22575b83519460608601908111868210176101b35784526001600160a01b038116855260d01c6020850152169082015290565b829150611bf2565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611ee183398151915254604051639ea9bd5960e01b8082526020926001600160a01b0392908490829060501c85168180611cbf363360048401611c42565b03915afa90811561062e57600091611dd7575b50611dcf57611cec6000356001600160e01b031916610f78565b6001810154611d03906001600160a01b0316610e0c565b92831615908115611d9a575b8115611d7b575b5015611d2457505050600090565b829060405192839182528180611d3e363360048401611c42565b03915afa91821561062e57600092611d5557505090565b6111b19250803d10611d74575b611d6c81836101ee565b810190611c2a565b503d611d62565b5460301c65ffffffffffff16905065ffffffffffff4291161138611d16565b905065ffffffffffff611db3825465ffffffffffff1690565b168015159081611dc5575b5090611d0f565b9050421138611dbe565b505050600190565b611dee9150843d8611611d7457611d6c81836101ee565b38611cd2565b600080516020611ee183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b906001600160a01b03808316919081168203611dcf578260d01c9065ffffffffffff809460a01c16938415611ed8575b808260d01c9260a01c16918215611ecf575b808410611ec7575b5080821690851611611ebf575b5060a09290921b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b925038611e98565b925038611e8b565b91508091611e83565b935083611e7156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x1a0633e9e78bdc97a7deeea1d13cb06c1f5ec735e67ec75a388e6f57daf9d20b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x6e23d", + "value": "0x0", + "data": "0x60808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x3b" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xE7044516DC4584E1EC3307e252E3A689800227bB", + "initCode": "60808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xbcd2ed240dd78712e82c3e68f587f396f781e9ee6bdfea2196b847ed9ee1db90", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x55686", + "value": "0x0", + "data": "0x60c03461009f57601f61045038819003918201601f19168301916001600160401b038311848410176100a457808492604094855283398101031261009f5780516001600160a01b0391828216820361009f5760200151918216820361009f5760805260a05260405161039590816100bb823960805181818160610152818161011e015261025d015260a05181818160e1015281816101a601526102210152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600436101561001457600080fd5b600091823560e01c9081630d253d76146101d5575080633a5381b5146101925780635fbfb9cf146100945763bc10273e1461004e57600080fd5b34610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b5034610090576100a33661029b565b91908151906bffffffffffffffffffffffff199060601b166020820152601481526100cd816102c6565b610109825193849263296601cd60e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b0392916020918591900381877f000000000000000000000000000000000000000000000000000000000000000087165af19283156101885760209493610159575b505191168152f35b61017a919350843d8111610181575b61017281836102f8565b81019061031a565b9138610151565b503d610168565b81513d86823e3d90fd5b5034610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b91905034610297576101e63661029b565b92906bffffffffffffffffffffffff199060601b1660208201526014815261020d816102c6565b6102498251938492631bb12e6960e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b03929160209185919003817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610188576020949361015957505191168152f35b8280fd5b60409060031901126102c1576004356001600160a01b03811681036102c1579060243590565b600080fd5b6040810190811067ffffffffffffffff8211176102e257604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176102e257604052565b908160209103126102c157516001600160a01b03811681036102c15790565b9392919060018060a01b03168452602060608186015281519182606087015260005b8381106103815750505060808160008260409488010152601f8019910116850101930152565b81810183015187820160800152820161035b5600000000000000000000000088546cc16ec33fd449fa929fb8ac900793018784000000000000000000000000e7044516dc4584e1ec3307e252e3a689800227bb", + "nonce": "0x3c" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x4caf43D403Cf2e9cDE274E58343d3D0DCA1C571d", + "initCode": "60c03461009f57601f61045038819003918201601f19168301916001600160401b038311848410176100a457808492604094855283398101031261009f5780516001600160a01b0391828216820361009f5760200151918216820361009f5760805260a05260405161039590816100bb823960805181818160610152818161011e015261025d015260a05181818160e1015281816101a601526102210152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600436101561001457600080fd5b600091823560e01c9081630d253d76146101d5575080633a5381b5146101925780635fbfb9cf146100945763bc10273e1461004e57600080fd5b34610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b5034610090576100a33661029b565b91908151906bffffffffffffffffffffffff199060601b166020820152601481526100cd816102c6565b610109825193849263296601cd60e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b0392916020918591900381877f000000000000000000000000000000000000000000000000000000000000000087165af19283156101885760209493610159575b505191168152f35b61017a919350843d8111610181575b61017281836102f8565b81019061031a565b9138610151565b503d610168565b81513d86823e3d90fd5b5034610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b91905034610297576101e63661029b565b92906bffffffffffffffffffffffff199060601b1660208201526014815261020d816102c6565b6102498251938492631bb12e6960e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b03929160209185919003817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610188576020949361015957505191168152f35b8280fd5b60409060031901126102c1576004356001600160a01b03811681036102c1579060243590565b600080fd5b6040810190811067ffffffffffffffff8211176102e257604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176102e257604052565b908160209103126102c157516001600160a01b03811681036102c15790565b9392919060018060a01b03168452602060608186015281519182606087015260005b8381106103815750505060808160008260409488010152601f8019910116850101930152565b81810183015187820160800152820161035b5600000000000000000000000088546cc16ec33fd449fa929fb8ac900793018784000000000000000000000000e7044516dc4584e1ec3307e252e3a689800227bb" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xbb3a20da81d9d752f3e88c3acf252ba87b63cc472bc224b12c1f2075fb850851", + "0xf9988164183bf47b6ed3453c83f51fbb0f979c8d65fd927bb2c8a4558b4b9685", + "0x1a0633e9e78bdc97a7deeea1d13cb06c1f5ec735e67ec75a388e6f57daf9d20b", + "0xbcd2ed240dd78712e82c3e68f587f396f781e9ee6bdfea2196b847ed9ee1db90" + ], + "returns": {}, + "timestamp": 1690749002, + "chain": 80001, + "multi": false, + "commit": "199ae7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1690749009.json b/broadcast/DeployKernel.s.sol/80001/run-1690749009.json new file mode 100644 index 00000000..99f25b13 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1690749009.json @@ -0,0 +1,250 @@ +{ + "transactions": [ + { + "hash": "0xbb3a20da81d9d752f3e88c3acf252ba87b63cc472bc224b12c1f2075fb850851", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x7541a", + "value": "0x0", + "data": "0x6080806040523461001657610550908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c806319d9363c146102c55780634c96a3891461024e5780635414dff014610201578063ade809051461014f578063db4c545e146101215763e919e3ea1461006257600080fd5b8060031936011261011d5761007561038b565b602435928360601c80331490151715610112576100906103d4565b9360896013860187f59384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b84903d156100fb57503d81803e3d90fd5b63301164258252601cfd5b5063301164258552601cfd5b632f6348368552601cfd5b8280fd5b83823461014b578160031936011261014b57602090608960136101426103d4565b01209051908152f35b5080fd5b508060031936011261011d5761016361038b565b60243567ffffffffffffffff81116101fd5761018290369085016103a6565b61018d9491946103d4565b9060896013830188f09586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b8363301164258952601cfd5b8480fd5b5082903461014b57602036600319011261014b57602092608960136102246103d4565b012060ff84536035523060601b600152356015526055822091603552519060018060a01b03168152f35b50602036600319011261011d5761026361038b565b61026b6103d4565b9260896013850186f09384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b50606036600319011261011d576102da61038b565b6024359260443567ffffffffffffffff8111610387576102fd90369083016103a6565b8560609692961c8033149015171561037b576103176103d4565b9160896013840189f59586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b82632f6348368852601cfd5b8580fd5b600435906001600160a01b03821682036103a157565b600080fd5b9181601f840112156103a15782359167ffffffffffffffff83116103a157602083818601950101116103a157565b604051903060701c1561047857666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d825256fe09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "nonce": "0x39" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x61D48C31C95C7d5a7C567b38061a9fd52E1a3D97", + "initCode": "6080806040523461001657610550908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c806319d9363c146102c55780634c96a3891461024e5780635414dff014610201578063ade809051461014f578063db4c545e146101215763e919e3ea1461006257600080fd5b8060031936011261011d5761007561038b565b602435928360601c80331490151715610112576100906103d4565b9360896013860187f59384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b84903d156100fb57503d81803e3d90fd5b63301164258252601cfd5b5063301164258552601cfd5b632f6348368552601cfd5b8280fd5b83823461014b578160031936011261014b57602090608960136101426103d4565b01209051908152f35b5080fd5b508060031936011261011d5761016361038b565b60243567ffffffffffffffff81116101fd5761018290369085016103a6565b61018d9491946103d4565b9060896013830188f09586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b8363301164258952601cfd5b8480fd5b5082903461014b57602036600319011261014b57602092608960136102246103d4565b012060ff84536035523060601b600152356015526055822091603552519060018060a01b03168152f35b50602036600319011261011d5761026361038b565b61026b6103d4565b9260896013850186f09384156101065785848285839452600080516020610530833981519152602082015234885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b50606036600319011261011d576102da61038b565b6024359260443567ffffffffffffffff8111610387576102fd90369083016103a6565b8560609692961c8033149015171561037b576103176103d4565b9160896013840189f59586156101f1579181889392849387845260008051602061053083398151915260208501528884013786019034885af1156100ea57508260008051602061051083398151915285602096a3516001600160a01b039091168152f35b82632f6348368852601cfd5b8580fd5b600435906001600160a01b03821682036103a157565b600080fd5b9181601f840112156103a15782359167ffffffffffffffff83116103a157602083818601950101116103a157565b604051903060701c1561047857666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d825256fe09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xf9988164183bf47b6ed3453c83f51fbb0f979c8d65fd927bb2c8a4558b4b9685", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x2bc818", + "value": "0x0", + "data": "0x60e0346100f9576001600160401b0390601f61265638819003918201601f1916830191848311848410176100e35780849260409485528339810103126100f9578051906001600160a01b039081831683036100f95760200151908116918282036100f95760805260c052604051916120ed90818401908111848210176100e3576020928492610569843981520301906000f080156100d75760a05260405161046a90816100ff8239608051818181606c015281816101ee01526102df015260a0518181816101900152610356015260c0518160b30152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040818152600436101561001457600080fd5b600091823560e01c908163037637aa14610342575080631bb12e6914610276578063296601cd146100e2578063b0d691fe1461009f5763f961ea491461005957600080fd5b3461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b503461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160601b0383836100f536610385565b849391945192602097889363347d5e2560e21b8587015260018060a01b039788821660248801528760448801528060648801526101796084948281878b01378b86848b01015261016d601f199761015e888c8b601f8901168101038d606482019052018c6103eb565b8b519485938b85019788610423565b038681018352826103eb565b519020169185519485936306764d8f60e21b8552887f0000000000000000000000000000000000000000000000000000000000000000166004860152602485015260606044850152805190816064860152858a5b83811061025f5750505090601f828a858795860101520116810103018187877f0000000000000000000000000000000000000000000000000000000000000000165af19384156102545793610225575b505191168152f35b610246919350843d861161024d575b61023e81836103eb565b81019061044b565b918461021d565b503d610234565b8251903d90823e3d90fd5b8281018201518982018701528896508791016101cd565b503461009b576001600160601b036102b76102a961029336610385565b8795939594919451948593602085019788610423565b03601f1981018352826103eb565b51902082516305414dff60e41b815291166004820152906001600160a01b03906020836024817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610338576020949361031957505191168152f35b610331919350843d811161024d5761023e81836103eb565b913861021d565b81513d86823e3d90fd5b83903461009b578160031936011261009b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60606003198201126103e6576004356001600160a01b03811681036103e6579160243567ffffffffffffffff928382116103e657806023830112156103e65781600401359384116103e657602484830101116103e657602401919060443590565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761040d57604052565b634e487b7160e01b600052604160045260246000fd5b90928092603495946001600160601b03199060601b1683526014830137019060148201520190565b908160209103126103e657516001600160a01b03811681036103e657905661014034620001b057601f620020ed38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611f019283620001ec8439608051836119cb015260a051836119ee015260c05183611a60015260e05183611a86015251826119aa0152518181816104b101528181610673015281816107880152818161091501528181610a4c01528181610c6f01528181610d9001528181610ea301528181610fcd01526113f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b36610fb057005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f57806394e2c9e31461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e57610f1e565b610e8c565b610ddc565b610d5d565b610cce565b610c59565b610c30565b610bfb565b610b53565b610b1c565b610a36565b6109de565b6108cc565b610803565b61073f565b6106f5565b61064f565b610443565b6103b1565b610357565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b3461018557600036600319011261018557600080516020611ee18339815191525460405160509190911c6001600160a01b03168152602090f35b6001600160a01b0381160361018557565b359061021c8261030e565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761037360043561030e565b61037e60243561030e565b6064356001600160401b0381116101855761039d90369060040161032a565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103ef6103e6602092369060040161032a565b90600435611abc565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c036600319011261018557610457610402565b602435906104648261030e565b604435906104718261030e565b610479610419565b9261048261042e565b9060a4356001600160401b038111610185576104a290369060040161032a565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610645575b61063357849261050f6105a6926105006104f261020f565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261053687610f78565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105d06000998a94600484016112e5565b038183895af1801561062e57610615575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610622610628926101a0565b8061017a565b386105e1565b6112f6565b604051637046c88d60e01b8152600490fd5b50303314156104da565b6020366003190112610185576004356106678161030e565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106eb575b61063357807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561069c565b60031960603682011261018557600435906001600160401b038211610185576101609082360301126101855761073760209160443590602435906004016113e1565b604051908152f35b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d5575b506040519081529081906020820190565b6107f6915060203d81116107fc575b6107ee81836101ee565b810190611302565b386107c4565b503d6107e4565b34610185576020366003190112610185576102d0610848610822610402565b60006060604051610832816101b8565b8281528260208201528260408201520152610f78565b60405190610855826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b6080366003190112610185576004356108e48161030e565b6044356001600160401b0381116101855761090390369060040161032a565b919060643592600284101561018557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806109a8575b61063357600191610957913691611029565b926109618161106f565b036109875760008281939260208394519201905af43d82803e15610983573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610983573d90f35b506109b86109b4611c7b565b1590565b610945565b604051906109ca826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc6109bd565b90604060031983011261018557600435610a138161030e565b91602435906001600160401b03821161018557610a329160040161032a565b9091565b610a3f366109fa565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610b12575b6106335780600080516020611ee18339815191525460501c1691610a9881611df4565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b03925af1801561062e57610afe575080f35b80610622610b0b926101a0565b80f35b8380fd5b5030331415610a75565b34610185576000366003190112610185576020600080516020611ee18339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610ba9610b6f61023e565b610b776109bd565b90604051928392600f60f81b8452610b9b60209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610be457505050500390f35b835185528695509381019392810192600101610bd5565b34610185576000366003190112610185576020600080516020611ee18339815191525465ffffffffffff60405191831c168152f35b34610185576000366003190112610185576000546040516001600160a01b039091168152602090f35b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610cea60043561030e565b610cf560243561030e565b6001600160401b0360443581811161018557610d15903690600401610c9e565b505060643581811161018557610d2f903690600401610c9e565b505060843590811161018557610d4990369060040161032a565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d557506040519081529081906020820190565b610de5366109fa565b600080516020611ee18339815191525490926001600160a01b03918290610e189060501c82165b6001600160a01b031690565b16610e7b57610e2681611df4565b169160405191600093849281847fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8180a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b60405162dc149f60e41b8152600490fd5b602036600319011261018557610ea0610402565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610f14575b61063357600080516020611ee183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610ed3565b346101855760a036600319011261018557610f3a60043561030e565b610f4560243561030e565b6084356001600160401b03811161018557610f6490369060040161032a565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b6000610fc681356001600160e01b031916610f78565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061101a575b61063357818091368280378136915af43d82803e15610983573d90f35b50611023611c7b565b15610ffd565b9291926001600160401b0382116101b35760405191611052601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b6002111561107957565b634e487b7160e01b600052602160045260246000fd5b903590601e198136030182121561018557018035906001600160401b0382116101855760200191813603831361018557565b906004116101855790600490565b906024116101855760100190601490565b909291928360041161018557831161018557600401916003190190565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b0319903581811693926004811061118757505050565b60040360031b82901b16169150565b9080601f83011215610185578160206111b193359101611029565b90565b919061016083820312610185576111c961021e565b926111d38161031f565b8452602081013560208501526040810135916001600160401b03928381116101855781611201918401611196565b60408601526060820135838111610185578161121e918401611196565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101855782611270918501611196565b9086015261014092838301359081116101855761128d9201611196565b90830152565b6bffffffffffffffffffffffff1990358181169392601481106112b557505050565b60140360031b82901b16169150565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206111b19381815201916112c4565b6040513d6000823e3d90fd5b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916113d7906020810151608084015283810151611356610160918260a08701526101c0860190610260565b906113c4611376606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6000926001600160a01b039284927f0000000000000000000000000000000000000000000000000000000000000000851633036116d957610140948582019161143c611436611430858461108f565b906110c1565b9061116a565b9663ffffffff60e01b93600080516020611ee18339815191529285611462855460e01b90565b8b16166116c7578a9561147536836111b4565b9a168061152d5750926020979694926114aa6114a361149c6114be956114e39e9a9861108f565b80916110e0565b3691611029565b908701525460501c6001600160a01b031690565b935b8561151f575b604051633a871cdd60e01b81529889968795869360048501611311565b0393165af191821561062e576111b193926114ff575b50611e41565b61151891925060203d81116107fc576107ee81836101ee565b90386114f9565b8280808089335af1506114c6565b9798509296600160e01b81036115d65750916114e398979593916020979593611567611562611436611430606087018761108f565b610f78565b60018101549093906001600160a01b031697858916156115bf575b5061149c611593926114a39261108f565b9089015254607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617966114c0565b5460501c6001600160a01b0316975061149c611582565b919795939650919350600160e11b146000146116ba5761163b90611635611606611436611430606088018861108f565b9161162f610e0c61162961162361161d858b61108f565b906110cf565b90611293565b60601c90565b9561108f565b9161174b565b97939992989190999884871690813b156116b657918c91611676969594938360405180998195829463064acaab60e11b8452600484016112e5565b03925af1801561062e576114e39a6020998d9661169a936116a3575b503691611029565b908201526114c0565b806106226116b0926101a0565b38611692565b8c80fd5b5050505050505050600190565b60405163fc2f51c560e01b8152600490fd5b604051636b31ba1560e11b8152600490fd5b3590602081106116f9575090565b6000199060200360031b1b1690565b6040906111b19492815281602082015201916112c4565b6001600160d01b0319903581811693926006811061173c57505050565b60060360031b82901b16169150565b90929161175881856110fd565b611761916116eb565b9360588101938593607887019384886058019061177f918387611152565b611788916116eb565b611792828661110e565b61179b916116eb565b986117a6838761111f565b6117af91611293565b60601c906117be36828c611029565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198a1692820192909252606081019e909e526001600160a01b039490941660808e015260a0808e01919091528c529a8b929061183660c0826101ee565b519020611842906119a8565b600080516020611ee18339815191525490939060501c6001600160a01b03169101976078890161187391868a611152565b60405163199ed7c960e11b81529485939284928392611896929060048501611708565b03915afa92831561062e576115626118dc61021c956105369460009161198b575b506118d56118c5878b61110e565b6001600160a01b031992916116eb565b1690611e41565b9a61197b8561196b60788c8c01019b607719908303019a611942610e0c61162961162361192b61192561191f6119186116296116238c8b61111f565b9988611130565b9061171f565b60d01c90565b9c61193c61192561191f8389611141565b956110cf565b9461195c61194e61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6119a291508d803d106107fc576107ee81836101ee565b386118b7565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611a35575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611a16565b600080516020611ee18339815191525460405163199ed7c960e11b81526001600160a01b03949093602093859360501c87169284928392611b0292919060048501611708565b03915afa801561062e57611b1e91600091611b8f575b50611bad565b60208101514265ffffffffffff90911611611b805742611b55611b4a604084015165ffffffffffff1690565b65ffffffffffff1690565b10611b8057516001600160a01b031616611b7457630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b0319919050565b611ba7915060203d81116107fc576107ee81836101ee565b38611b18565b604080516001600160401b03929060608101848111828210176101b35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611c22575b83519460608601908111868210176101b35784526001600160a01b038116855260d01c6020850152169082015290565b829150611bf2565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611ee183398151915254604051639ea9bd5960e01b8082526020926001600160a01b0392908490829060501c85168180611cbf363360048401611c42565b03915afa90811561062e57600091611dd7575b50611dcf57611cec6000356001600160e01b031916610f78565b6001810154611d03906001600160a01b0316610e0c565b92831615908115611d9a575b8115611d7b575b5015611d2457505050600090565b829060405192839182528180611d3e363360048401611c42565b03915afa91821561062e57600092611d5557505090565b6111b19250803d10611d74575b611d6c81836101ee565b810190611c2a565b503d611d62565b5460301c65ffffffffffff16905065ffffffffffff4291161138611d16565b905065ffffffffffff611db3825465ffffffffffff1690565b168015159081611dc5575b5090611d0f565b9050421138611dbe565b505050600190565b611dee9150843d8611611d7457611d6c81836101ee565b38611cd2565b600080516020611ee183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b906001600160a01b03808316919081168203611dcf578260d01c9065ffffffffffff809460a01c16938415611ed8575b808260d01c9260a01c16918215611ecf575b808410611ec7575b5080821690851611611ebf575b5060a09290921b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b925038611e98565b925038611e8b565b91508091611e83565b935083611e7156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd900000000000000000000000061d48c31c95c7d5a7c567b38061a9fd52e1a3d970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x3a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x88546cc16eC33FD449fa929Fb8ac900793018784", + "initCode": "60e0346100f9576001600160401b0390601f61265638819003918201601f1916830191848311848410176100e35780849260409485528339810103126100f9578051906001600160a01b039081831683036100f95760200151908116918282036100f95760805260c052604051916120ed90818401908111848210176100e3576020928492610569843981520301906000f080156100d75760a05260405161046a90816100ff8239608051818181606c015281816101ee01526102df015260a0518181816101900152610356015260c0518160b30152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040818152600436101561001457600080fd5b600091823560e01c908163037637aa14610342575080631bb12e6914610276578063296601cd146100e2578063b0d691fe1461009f5763f961ea491461005957600080fd5b3461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b503461009b578160031936011261009b57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160601b0383836100f536610385565b849391945192602097889363347d5e2560e21b8587015260018060a01b039788821660248801528760448801528060648801526101796084948281878b01378b86848b01015261016d601f199761015e888c8b601f8901168101038d606482019052018c6103eb565b8b519485938b85019788610423565b038681018352826103eb565b519020169185519485936306764d8f60e21b8552887f0000000000000000000000000000000000000000000000000000000000000000166004860152602485015260606044850152805190816064860152858a5b83811061025f5750505090601f828a858795860101520116810103018187877f0000000000000000000000000000000000000000000000000000000000000000165af19384156102545793610225575b505191168152f35b610246919350843d861161024d575b61023e81836103eb565b81019061044b565b918461021d565b503d610234565b8251903d90823e3d90fd5b8281018201518982018701528896508791016101cd565b503461009b576001600160601b036102b76102a961029336610385565b8795939594919451948593602085019788610423565b03601f1981018352826103eb565b51902082516305414dff60e41b815291166004820152906001600160a01b03906020836024817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610338576020949361031957505191168152f35b610331919350843d811161024d5761023e81836103eb565b913861021d565b81513d86823e3d90fd5b83903461009b578160031936011261009b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60606003198201126103e6576004356001600160a01b03811681036103e6579160243567ffffffffffffffff928382116103e657806023830112156103e65781600401359384116103e657602484830101116103e657602401919060443590565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761040d57604052565b634e487b7160e01b600052604160045260246000fd5b90928092603495946001600160601b03199060601b1683526014830137019060148201520190565b908160209103126103e657516001600160a01b03811681036103e657905661014034620001b057601f620020ed38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611f019283620001ec8439608051836119cb015260a051836119ee015260c05183611a60015260e05183611a86015251826119aa0152518181816104b101528181610673015281816107880152818161091501528181610a4c01528181610c6f01528181610d9001528181610ea301528181610fcd01526113f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b36610fb057005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f57806394e2c9e31461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e57610f1e565b610e8c565b610ddc565b610d5d565b610cce565b610c59565b610c30565b610bfb565b610b53565b610b1c565b610a36565b6109de565b6108cc565b610803565b61073f565b6106f5565b61064f565b610443565b6103b1565b610357565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b3461018557600036600319011261018557600080516020611ee18339815191525460405160509190911c6001600160a01b03168152602090f35b6001600160a01b0381160361018557565b359061021c8261030e565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761037360043561030e565b61037e60243561030e565b6064356001600160401b0381116101855761039d90369060040161032a565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103ef6103e6602092369060040161032a565b90600435611abc565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c036600319011261018557610457610402565b602435906104648261030e565b604435906104718261030e565b610479610419565b9261048261042e565b9060a4356001600160401b038111610185576104a290369060040161032a565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610645575b61063357849261050f6105a6926105006104f261020f565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261053687610f78565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105d06000998a94600484016112e5565b038183895af1801561062e57610615575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610622610628926101a0565b8061017a565b386105e1565b6112f6565b604051637046c88d60e01b8152600490fd5b50303314156104da565b6020366003190112610185576004356106678161030e565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106eb575b61063357807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561069c565b60031960603682011261018557600435906001600160401b038211610185576101609082360301126101855761073760209160443590602435906004016113e1565b604051908152f35b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d5575b506040519081529081906020820190565b6107f6915060203d81116107fc575b6107ee81836101ee565b810190611302565b386107c4565b503d6107e4565b34610185576020366003190112610185576102d0610848610822610402565b60006060604051610832816101b8565b8281528260208201528260408201520152610f78565b60405190610855826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b6080366003190112610185576004356108e48161030e565b6044356001600160401b0381116101855761090390369060040161032a565b919060643592600284101561018557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806109a8575b61063357600191610957913691611029565b926109618161106f565b036109875760008281939260208394519201905af43d82803e15610983573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610983573d90f35b506109b86109b4611c7b565b1590565b610945565b604051906109ca826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc6109bd565b90604060031983011261018557600435610a138161030e565b91602435906001600160401b03821161018557610a329160040161032a565b9091565b610a3f366109fa565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610b12575b6106335780600080516020611ee18339815191525460501c1691610a9881611df4565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b03925af1801561062e57610afe575080f35b80610622610b0b926101a0565b80f35b8380fd5b5030331415610a75565b34610185576000366003190112610185576020600080516020611ee18339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610ba9610b6f61023e565b610b776109bd565b90604051928392600f60f81b8452610b9b60209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610be457505050500390f35b835185528695509381019392810192600101610bd5565b34610185576000366003190112610185576020600080516020611ee18339815191525465ffffffffffff60405191831c168152f35b34610185576000366003190112610185576000546040516001600160a01b039091168152602090f35b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610cea60043561030e565b610cf560243561030e565b6001600160401b0360443581811161018557610d15903690600401610c9e565b505060643581811161018557610d2f903690600401610c9e565b505060843590811161018557610d4990369060040161032a565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d557506040519081529081906020820190565b610de5366109fa565b600080516020611ee18339815191525490926001600160a01b03918290610e189060501c82165b6001600160a01b031690565b16610e7b57610e2681611df4565b169160405191600093849281847fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8180a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b60405162dc149f60e41b8152600490fd5b602036600319011261018557610ea0610402565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610f14575b61063357600080516020611ee183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610ed3565b346101855760a036600319011261018557610f3a60043561030e565b610f4560243561030e565b6084356001600160401b03811161018557610f6490369060040161032a565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b6000610fc681356001600160e01b031916610f78565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061101a575b61063357818091368280378136915af43d82803e15610983573d90f35b50611023611c7b565b15610ffd565b9291926001600160401b0382116101b35760405191611052601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b6002111561107957565b634e487b7160e01b600052602160045260246000fd5b903590601e198136030182121561018557018035906001600160401b0382116101855760200191813603831361018557565b906004116101855790600490565b906024116101855760100190601490565b909291928360041161018557831161018557600401916003190190565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b0319903581811693926004811061118757505050565b60040360031b82901b16169150565b9080601f83011215610185578160206111b193359101611029565b90565b919061016083820312610185576111c961021e565b926111d38161031f565b8452602081013560208501526040810135916001600160401b03928381116101855781611201918401611196565b60408601526060820135838111610185578161121e918401611196565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101855782611270918501611196565b9086015261014092838301359081116101855761128d9201611196565b90830152565b6bffffffffffffffffffffffff1990358181169392601481106112b557505050565b60140360031b82901b16169150565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206111b19381815201916112c4565b6040513d6000823e3d90fd5b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916113d7906020810151608084015283810151611356610160918260a08701526101c0860190610260565b906113c4611376606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6000926001600160a01b039284927f0000000000000000000000000000000000000000000000000000000000000000851633036116d957610140948582019161143c611436611430858461108f565b906110c1565b9061116a565b9663ffffffff60e01b93600080516020611ee18339815191529285611462855460e01b90565b8b16166116c7578a9561147536836111b4565b9a168061152d5750926020979694926114aa6114a361149c6114be956114e39e9a9861108f565b80916110e0565b3691611029565b908701525460501c6001600160a01b031690565b935b8561151f575b604051633a871cdd60e01b81529889968795869360048501611311565b0393165af191821561062e576111b193926114ff575b50611e41565b61151891925060203d81116107fc576107ee81836101ee565b90386114f9565b8280808089335af1506114c6565b9798509296600160e01b81036115d65750916114e398979593916020979593611567611562611436611430606087018761108f565b610f78565b60018101549093906001600160a01b031697858916156115bf575b5061149c611593926114a39261108f565b9089015254607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617966114c0565b5460501c6001600160a01b0316975061149c611582565b919795939650919350600160e11b146000146116ba5761163b90611635611606611436611430606088018861108f565b9161162f610e0c61162961162361161d858b61108f565b906110cf565b90611293565b60601c90565b9561108f565b9161174b565b97939992989190999884871690813b156116b657918c91611676969594938360405180998195829463064acaab60e11b8452600484016112e5565b03925af1801561062e576114e39a6020998d9661169a936116a3575b503691611029565b908201526114c0565b806106226116b0926101a0565b38611692565b8c80fd5b5050505050505050600190565b60405163fc2f51c560e01b8152600490fd5b604051636b31ba1560e11b8152600490fd5b3590602081106116f9575090565b6000199060200360031b1b1690565b6040906111b19492815281602082015201916112c4565b6001600160d01b0319903581811693926006811061173c57505050565b60060360031b82901b16169150565b90929161175881856110fd565b611761916116eb565b9360588101938593607887019384886058019061177f918387611152565b611788916116eb565b611792828661110e565b61179b916116eb565b986117a6838761111f565b6117af91611293565b60601c906117be36828c611029565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198a1692820192909252606081019e909e526001600160a01b039490941660808e015260a0808e01919091528c529a8b929061183660c0826101ee565b519020611842906119a8565b600080516020611ee18339815191525490939060501c6001600160a01b03169101976078890161187391868a611152565b60405163199ed7c960e11b81529485939284928392611896929060048501611708565b03915afa92831561062e576115626118dc61021c956105369460009161198b575b506118d56118c5878b61110e565b6001600160a01b031992916116eb565b1690611e41565b9a61197b8561196b60788c8c01019b607719908303019a611942610e0c61162961162361192b61192561191f6119186116296116238c8b61111f565b9988611130565b9061171f565b60d01c90565b9c61193c61192561191f8389611141565b956110cf565b9461195c61194e61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6119a291508d803d106107fc576107ee81836101ee565b386118b7565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611a35575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611a16565b600080516020611ee18339815191525460405163199ed7c960e11b81526001600160a01b03949093602093859360501c87169284928392611b0292919060048501611708565b03915afa801561062e57611b1e91600091611b8f575b50611bad565b60208101514265ffffffffffff90911611611b805742611b55611b4a604084015165ffffffffffff1690565b65ffffffffffff1690565b10611b8057516001600160a01b031616611b7457630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b0319919050565b611ba7915060203d81116107fc576107ee81836101ee565b38611b18565b604080516001600160401b03929060608101848111828210176101b35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611c22575b83519460608601908111868210176101b35784526001600160a01b038116855260d01c6020850152169082015290565b829150611bf2565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611ee183398151915254604051639ea9bd5960e01b8082526020926001600160a01b0392908490829060501c85168180611cbf363360048401611c42565b03915afa90811561062e57600091611dd7575b50611dcf57611cec6000356001600160e01b031916610f78565b6001810154611d03906001600160a01b0316610e0c565b92831615908115611d9a575b8115611d7b575b5015611d2457505050600090565b829060405192839182528180611d3e363360048401611c42565b03915afa91821561062e57600092611d5557505090565b6111b19250803d10611d74575b611d6c81836101ee565b810190611c2a565b503d611d62565b5460301c65ffffffffffff16905065ffffffffffff4291161138611d16565b905065ffffffffffff611db3825465ffffffffffff1690565b168015159081611dc5575b5090611d0f565b9050421138611dbe565b505050600190565b611dee9150843d8611611d7457611d6c81836101ee565b38611cd2565b600080516020611ee183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b906001600160a01b03808316919081168203611dcf578260d01c9065ffffffffffff809460a01c16938415611ed8575b808260d01c9260a01c16918215611ecf575b808410611ec7575b5080821690851611611ebf575b5060a09290921b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b925038611e98565b925038611e8b565b91508091611e83565b935083611e7156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd900000000000000000000000061d48c31c95c7d5a7c567b38061a9fd52e1a3d970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + }, + { + "transactionType": "CREATE", + "address": "0xdf89afDD53c813B645928a66594F2b841Da38BEA", + "initCode": "61014034620001b057601f620020ed38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611f019283620001ec8439608051836119cb015260a051836119ee015260c05183611a60015260e05183611a86015251826119aa0152518181816104b101528181610673015281816107880152818161091501528181610a4c01528181610c6f01528181610d9001528181610ea301528181610fcd01526113f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b36610fb057005b60003560e01c806306fdde03146101755780630b3dc35414610170578063150b7a021461016b5780631626ba7e1461016657806329f8b174146101615780633659cfe61461015c5780633a871cdd146101575780633e1b08121461015257806351166ba01461014d578063519454471461014857806354fd4d501461014357806355b14f501461013e57806357b750471461013957806384b0196e1461013457806388e7fd061461012f57806394e2c9e31461012a578063b0d691fe14610125578063bc197c8114610120578063d087d2881461011b578063d1f5789414610116578063d5416221146101115763f23a6e610361000e57610f1e565b610e8c565b610ddc565b610d5d565b610cce565b610c59565b610c30565b610bfb565b610b53565b610b1c565b610a36565b6109de565b6108cc565b610803565b61073f565b6106f5565b61064f565b610443565b6103b1565b610357565b6102d4565b6102a0565b600091031261018557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b357604052565b61018a565b608081019081106001600160401b038211176101b357604052565b604081019081106001600160401b038211176101b357604052565b90601f801991011681019081106001600160401b038211176101b357604052565b6040519061021c826101b8565b565b6040519061016082018281106001600160401b038211176101b357604052565b6040519061024b826101d3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b34610185576000366003190112610185576102d06102bc61023e565b604051918291602083526020830190610260565b0390f35b3461018557600036600319011261018557600080516020611ee18339815191525460405160509190911c6001600160a01b03168152602090f35b6001600160a01b0381160361018557565b359061021c8261030e565b9181601f84011215610185578235916001600160401b038311610185576020838186019501011161018557565b346101855760803660031901126101855761037360043561030e565b61037e60243561030e565b6064356001600160401b0381116101855761039d90369060040161032a565b5050604051630a85bd0160e11b8152602090f35b34610185576040366003190112610185576024356001600160401b038111610185576103ef6103e6602092369060040161032a565b90600435611abc565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361018557565b6064359065ffffffffffff8216820361018557565b6084359065ffffffffffff8216820361018557565b60c036600319011261018557610457610402565b602435906104648261030e565b604435906104718261030e565b610479610419565b9261048261042e565b9060a4356001600160401b038111610185576104a290369060040161032a565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610645575b61063357849261050f6105a6926105006104f261020f565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261053687610f78565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610185576040519063064acaab60e11b825281806105d06000998a94600484016112e5565b038183895af1801561062e57610615575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610622610628926101a0565b8061017a565b386105e1565b6112f6565b604051637046c88d60e01b8152600490fd5b50303314156104da565b6020366003190112610185576004356106678161030e565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106eb575b61063357807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561069c565b60031960603682011261018557600435906001600160401b038211610185576101609082360301126101855761073760209160443590602435906004016113e1565b604051908152f35b34610185576020366003190112610185576004356001600160c01b0381169081900361018557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d5575b506040519081529081906020820190565b6107f6915060203d81116107fc575b6107ee81836101ee565b810190611302565b386107c4565b503d6107e4565b34610185576020366003190112610185576102d0610848610822610402565b60006060604051610832816101b8565b8281528260208201528260408201520152610f78565b60405190610855826101b8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b6080366003190112610185576004356108e48161030e565b6044356001600160401b0381116101855761090390369060040161032a565b919060643592600284101561018557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806109a8575b61063357600191610957913691611029565b926109618161106f565b036109875760008281939260208394519201905af43d82803e15610983573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610983573d90f35b506109b86109b4611c7b565b1590565b610945565b604051906109ca826101d3565b6005825264302e322e3160d81b6020830152565b34610185576000366003190112610185576102d06102bc6109bd565b90604060031983011261018557600435610a138161030e565b91602435906001600160401b03821161018557610a329160040161032a565b9091565b610a3f366109fa565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610b12575b6106335780600080516020611ee18339815191525460501c1691610a9881611df4565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b03925af1801561062e57610afe575080f35b80610622610b0b926101a0565b80f35b8380fd5b5030331415610a75565b34610185576000366003190112610185576020600080516020611ee18339815191525460e01b6040519063ffffffff60e01b168152f35b3461018557600036600319011261018557610ba9610b6f61023e565b610b776109bd565b90604051928392600f60f81b8452610b9b60209360e08587015260e0860190610260565b908482036040860152610260565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610be457505050500390f35b835185528695509381019392810192600101610bd5565b34610185576000366003190112610185576020600080516020611ee18339815191525465ffffffffffff60405191831c168152f35b34610185576000366003190112610185576000546040516001600160a01b039091168152602090f35b34610185576000366003190112610185576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610185578235916001600160401b038311610185576020808501948460051b01011161018557565b346101855760a036600319011261018557610cea60043561030e565b610cf560243561030e565b6001600160401b0360443581811161018557610d15903690600401610c9e565b505060643581811161018557610d2f903690600401610c9e565b505060843590811161018557610d4990369060040161032a565b505060405163bc197c8160e01b8152602090f35b3461018557600036600319011261018557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561062e576102d0916000916107d557506040519081529081906020820190565b610de5366109fa565b600080516020611ee18339815191525490926001600160a01b03918290610e189060501c82165b6001600160a01b031690565b16610e7b57610e2681611df4565b169160405191600093849281847fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8180a3813b15610b0e578385610aec819593829463064acaab60e11b8452600484016112e5565b60405162dc149f60e41b8152600490fd5b602036600319011261018557610ea0610402565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610f14575b61063357600080516020611ee183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610ed3565b346101855760a036600319011261018557610f3a60043561030e565b610f4560243561030e565b6084356001600160401b03811161018557610f6490369060040161032a565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b6000610fc681356001600160e01b031916610f78565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061101a575b61063357818091368280378136915af43d82803e15610983573d90f35b50611023611c7b565b15610ffd565b9291926001600160401b0382116101b35760405191611052601f8201601f1916602001846101ee565b829481845281830111610185578281602093846000960137010152565b6002111561107957565b634e487b7160e01b600052602160045260246000fd5b903590601e198136030182121561018557018035906001600160401b0382116101855760200191813603831361018557565b906004116101855790600490565b906024116101855760100190601490565b909291928360041161018557831161018557600401916003190190565b906058116101855760380190602090565b906024116101855760040190602090565b906038116101855760240190601490565b90600a116101855760040190600690565b9060101161018557600a0190600690565b90939293848311610185578411610185578101920390565b6001600160e01b0319903581811693926004811061118757505050565b60040360031b82901b16169150565b9080601f83011215610185578160206111b193359101611029565b90565b919061016083820312610185576111c961021e565b926111d38161031f565b8452602081013560208501526040810135916001600160401b03928381116101855781611201918401611196565b60408601526060820135838111610185578161121e918401611196565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101855782611270918501611196565b9086015261014092838301359081116101855761128d9201611196565b90830152565b6bffffffffffffffffffffffff1990358181169392601481106112b557505050565b60140360031b82901b16169150565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206111b19381815201916112c4565b6040513d6000823e3d90fd5b90816020910312610185575190565b606080825282516001600160a01b031690820152919392916040916113d7906020810151608084015283810151611356610160918260a08701526101c0860190610260565b906113c4611376606085015193605f1994858983030160c08a0152610260565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610260565b92015190848303016101a0850152610260565b9460208201520152565b6000926001600160a01b039284927f0000000000000000000000000000000000000000000000000000000000000000851633036116d957610140948582019161143c611436611430858461108f565b906110c1565b9061116a565b9663ffffffff60e01b93600080516020611ee18339815191529285611462855460e01b90565b8b16166116c7578a9561147536836111b4565b9a168061152d5750926020979694926114aa6114a361149c6114be956114e39e9a9861108f565b80916110e0565b3691611029565b908701525460501c6001600160a01b031690565b935b8561151f575b604051633a871cdd60e01b81529889968795869360048501611311565b0393165af191821561062e576111b193926114ff575b50611e41565b61151891925060203d81116107fc576107ee81836101ee565b90386114f9565b8280808089335af1506114c6565b9798509296600160e01b81036115d65750916114e398979593916020979593611567611562611436611430606087018761108f565b610f78565b60018101549093906001600160a01b031697858916156115bf575b5061149c611593926114a39261108f565b9089015254607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617966114c0565b5460501c6001600160a01b0316975061149c611582565b919795939650919350600160e11b146000146116ba5761163b90611635611606611436611430606088018861108f565b9161162f610e0c61162961162361161d858b61108f565b906110cf565b90611293565b60601c90565b9561108f565b9161174b565b97939992989190999884871690813b156116b657918c91611676969594938360405180998195829463064acaab60e11b8452600484016112e5565b03925af1801561062e576114e39a6020998d9661169a936116a3575b503691611029565b908201526114c0565b806106226116b0926101a0565b38611692565b8c80fd5b5050505050505050600190565b60405163fc2f51c560e01b8152600490fd5b604051636b31ba1560e11b8152600490fd5b3590602081106116f9575090565b6000199060200360031b1b1690565b6040906111b19492815281602082015201916112c4565b6001600160d01b0319903581811693926006811061173c57505050565b60060360031b82901b16169150565b90929161175881856110fd565b611761916116eb565b9360588101938593607887019384886058019061177f918387611152565b611788916116eb565b611792828661110e565b61179b916116eb565b986117a6838761111f565b6117af91611293565b60601c906117be36828c611029565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198a1692820192909252606081019e909e526001600160a01b039490941660808e015260a0808e01919091528c529a8b929061183660c0826101ee565b519020611842906119a8565b600080516020611ee18339815191525490939060501c6001600160a01b03169101976078890161187391868a611152565b60405163199ed7c960e11b81529485939284928392611896929060048501611708565b03915afa92831561062e576115626118dc61021c956105369460009161198b575b506118d56118c5878b61110e565b6001600160a01b031992916116eb565b1690611e41565b9a61197b8561196b60788c8c01019b607719908303019a611942610e0c61162961162361192b61192561191f6119186116296116238c8b61111f565b9988611130565b9061171f565b60d01c90565b9c61193c61192561191f8389611141565b956110cf565b9461195c61194e61020f565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6119a291508d803d106107fc576107ee81836101ee565b386118b7565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611a35575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611a16565b600080516020611ee18339815191525460405163199ed7c960e11b81526001600160a01b03949093602093859360501c87169284928392611b0292919060048501611708565b03915afa801561062e57611b1e91600091611b8f575b50611bad565b60208101514265ffffffffffff90911611611b805742611b55611b4a604084015165ffffffffffff1690565b65ffffffffffff1690565b10611b8057516001600160a01b031616611b7457630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b0319919050565b611ba7915060203d81116107fc576107ee81836101ee565b38611b18565b604080516001600160401b03929060608101848111828210176101b35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611c22575b83519460608601908111868210176101b35784526001600160a01b038116855260d01c6020850152169082015290565b829150611bf2565b90816020910312610185575180151581036101855790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611ee183398151915254604051639ea9bd5960e01b8082526020926001600160a01b0392908490829060501c85168180611cbf363360048401611c42565b03915afa90811561062e57600091611dd7575b50611dcf57611cec6000356001600160e01b031916610f78565b6001810154611d03906001600160a01b0316610e0c565b92831615908115611d9a575b8115611d7b575b5015611d2457505050600090565b829060405192839182528180611d3e363360048401611c42565b03915afa91821561062e57600092611d5557505090565b6111b19250803d10611d74575b611d6c81836101ee565b810190611c2a565b503d611d62565b5460301c65ffffffffffff16905065ffffffffffff4291161138611d16565b905065ffffffffffff611db3825465ffffffffffff1690565b168015159081611dc5575b5090611d0f565b9050421138611dbe565b505050600190565b611dee9150843d8611611d7457611d6c81836101ee565b38611cd2565b600080516020611ee183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b906001600160a01b03808316919081168203611dcf578260d01c9065ffffffffffff809460a01c16938415611ed8575b808260d01c9260a01c16918215611ecf575b808410611ec7575b5080821690851611611ebf575b5060a09290921b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b925038611e98565b925038611e8b565b91508091611e83565b935083611e7156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x1a0633e9e78bdc97a7deeea1d13cb06c1f5ec735e67ec75a388e6f57daf9d20b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x6e23d", + "value": "0x0", + "data": "0x60808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056", + "nonce": "0x3b" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xE7044516DC4584E1EC3307e252E3A689800227bB", + "initCode": "60808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xbcd2ed240dd78712e82c3e68f587f396f781e9ee6bdfea2196b847ed9ee1db90", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x55686", + "value": "0x0", + "data": "0x60c03461009f57601f61045038819003918201601f19168301916001600160401b038311848410176100a457808492604094855283398101031261009f5780516001600160a01b0391828216820361009f5760200151918216820361009f5760805260a05260405161039590816100bb823960805181818160610152818161011e015261025d015260a05181818160e1015281816101a601526102210152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600436101561001457600080fd5b600091823560e01c9081630d253d76146101d5575080633a5381b5146101925780635fbfb9cf146100945763bc10273e1461004e57600080fd5b34610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b5034610090576100a33661029b565b91908151906bffffffffffffffffffffffff199060601b166020820152601481526100cd816102c6565b610109825193849263296601cd60e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b0392916020918591900381877f000000000000000000000000000000000000000000000000000000000000000087165af19283156101885760209493610159575b505191168152f35b61017a919350843d8111610181575b61017281836102f8565b81019061031a565b9138610151565b503d610168565b81513d86823e3d90fd5b5034610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b91905034610297576101e63661029b565b92906bffffffffffffffffffffffff199060601b1660208201526014815261020d816102c6565b6102498251938492631bb12e6960e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b03929160209185919003817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610188576020949361015957505191168152f35b8280fd5b60409060031901126102c1576004356001600160a01b03811681036102c1579060243590565b600080fd5b6040810190811067ffffffffffffffff8211176102e257604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176102e257604052565b908160209103126102c157516001600160a01b03811681036102c15790565b9392919060018060a01b03168452602060608186015281519182606087015260005b8381106103815750505060808160008260409488010152601f8019910116850101930152565b81810183015187820160800152820161035b5600000000000000000000000088546cc16ec33fd449fa929fb8ac900793018784000000000000000000000000e7044516dc4584e1ec3307e252e3a689800227bb", + "nonce": "0x3c" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x4caf43D403Cf2e9cDE274E58343d3D0DCA1C571d", + "initCode": "60c03461009f57601f61045038819003918201601f19168301916001600160401b038311848410176100a457808492604094855283398101031261009f5780516001600160a01b0391828216820361009f5760200151918216820361009f5760805260a05260405161039590816100bb823960805181818160610152818161011e015261025d015260a05181818160e1015281816101a601526102210152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600436101561001457600080fd5b600091823560e01c9081630d253d76146101d5575080633a5381b5146101925780635fbfb9cf146100945763bc10273e1461004e57600080fd5b34610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b5034610090576100a33661029b565b91908151906bffffffffffffffffffffffff199060601b166020820152601481526100cd816102c6565b610109825193849263296601cd60e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b0392916020918591900381877f000000000000000000000000000000000000000000000000000000000000000087165af19283156101885760209493610159575b505191168152f35b61017a919350843d8111610181575b61017281836102f8565b81019061031a565b9138610151565b503d610168565b81513d86823e3d90fd5b5034610090578160031936011261009057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b91905034610297576101e63661029b565b92906bffffffffffffffffffffffff199060601b1660208201526014815261020d816102c6565b6102498251938492631bb12e6960e01b84527f000000000000000000000000000000000000000000000000000000000000000060048501610339565b6001600160a01b03929160209185919003817f000000000000000000000000000000000000000000000000000000000000000086165afa928315610188576020949361015957505191168152f35b8280fd5b60409060031901126102c1576004356001600160a01b03811681036102c1579060243590565b600080fd5b6040810190811067ffffffffffffffff8211176102e257604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176102e257604052565b908160209103126102c157516001600160a01b03811681036102c15790565b9392919060018060a01b03168452602060608186015281519182606087015260005b8381106103815750505060808160008260409488010152601f8019910116850101930152565b81810183015187820160800152820161035b5600000000000000000000000088546cc16ec33fd449fa929fb8ac900793018784000000000000000000000000e7044516dc4584e1ec3307e252e3a689800227bb" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbb3a20da81d9d752f3e88c3acf252ba87b63cc472bc224b12c1f2075fb850851", + "transactionIndex": "0x5", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0xf1fc5", + "gasUsed": "0x54e44", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000001da5e68fe7c00000000000000000000000000000000000000000000000000153cce2ab6b2606a0000000000000000000000000000000000000000000021071cabdfa9fec153e4000000000000000000000000000000000000000000000000153af3cc4db3e46a0000000000000000000000000000000000000000000021071cadba0867bfcfe4", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "transactionHash": "0xbb3a20da81d9d752f3e88c3acf252ba87b63cc472bc224b12c1f2075fb850851", + "transactionIndex": "0x5", + "logIndex": "0x1c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + }, + { + "transactionHash": "0xf9988164183bf47b6ed3453c83f51fbb0f979c8d65fd927bb2c8a4558b4b9685", + "transactionIndex": "0x7", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x33a79d", + "gasUsed": "0x1fb276", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x000000000000000000000000000000000000000000000000000b11f157b3aa00000000000000000000000000000000000000000000000000153af3cc4d5f002a0000000000000000000000000000000000000000000021071caf6a2f0cbccde4000000000000000000000000000000000000000000000000152fe1daf5ab562a0000000000000000000000000000000000000000000021071cba7c20647077e4", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "transactionHash": "0xf9988164183bf47b6ed3453c83f51fbb0f979c8d65fd927bb2c8a4558b4b9685", + "transactionIndex": "0x7", + "logIndex": "0x21", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + }, + { + "transactionHash": "0x1a0633e9e78bdc97a7deeea1d13cb06c1f5ec735e67ec75a388e6f57daf9d20b", + "transactionIndex": "0x8", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x38a372", + "gasUsed": "0x4fbd5", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000001bd9445c41b00000000000000000000000000000000000000000000000000152fe1daf3b02eca0000000000000000000000000000000000000000000021071cba7c20647077e4000000000000000000000000000000000000000000000000152e2446adec13ca0000000000000000000000000000000000000000000021071cbc39b4aa3492e4", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "transactionHash": "0x1a0633e9e78bdc97a7deeea1d13cb06c1f5ec735e67ec75a388e6f57daf9d20b", + "transactionIndex": "0x8", + "logIndex": "0x22", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + }, + { + "transactionHash": "0xbcd2ed240dd78712e82c3e68f587f396f781e9ee6bdfea2196b847ed9ee1db90", + "transactionIndex": "0x9", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x3c80c9", + "gasUsed": "0x3dd57", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x00000000000000000000000000000000000000000000000000015985dffaf900000000000000000000000000000000000000000000000000152e2446ad9c567a0000000000000000000000000000000000000000000021071cbc39b4aa3492e4000000000000000000000000000000000000000000000000152ccac0cda15d7a0000000000000000000000000000000000000000000021071cbd933a8a2f8be4", + "blockHash": "0x2dc761bbaeed43a752a8228bb0a2bb7c5330423c8a84ef7376e459e9749933ad", + "blockNumber": "0x24ae6db", + "transactionHash": "0xbcd2ed240dd78712e82c3e68f587f396f781e9ee6bdfea2196b847ed9ee1db90", + "transactionIndex": "0x9", + "logIndex": "0x23", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000020000000000000000001000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1690749009, + "chain": 80001, + "multi": false, + "commit": "199ae7d" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1691515307.json b/broadcast/DeployKernel.s.sol/80001/run-1691515307.json new file mode 100644 index 00000000..892d8b35 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1691515307.json @@ -0,0 +1,53 @@ +{ + "transactions": [ + { + "hash": "0x314be895ae55ffdd298f0136cb3c86d4dca1eed2c3b8dfb20eb4b227287b87e8", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x29c6538b755ed3054352a6b92177409f8a013da3cfaea434a850ea08d1c8e647", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x314be895ae55ffdd298f0136cb3c86d4dca1eed2c3b8dfb20eb4b227287b87e8", + "0x29c6538b755ed3054352a6b92177409f8a013da3cfaea434a850ea08d1c8e647" + ], + "returns": {}, + "timestamp": 1691515307, + "chain": 80001, + "multi": false, + "commit": "95addde" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1691515320.json b/broadcast/DeployKernel.s.sol/80001/run-1691515320.json new file mode 100644 index 00000000..08b37814 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1691515320.json @@ -0,0 +1,132 @@ +{ + "transactions": [ + { + "hash": "0x314be895ae55ffdd298f0136cb3c86d4dca1eed2c3b8dfb20eb4b227287b87e8", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x29c6538b755ed3054352a6b92177409f8a013da3cfaea434a850ea08d1c8e647", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x314be895ae55ffdd298f0136cb3c86d4dca1eed2c3b8dfb20eb4b227287b87e8", + "transactionIndex": "0x24", + "blockHash": "0x91d6f03c614f51248f2fa2c1a927f77a189226af65b600ad3eeaba95537e1830", + "blockNumber": "0x24fbd75", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x7572e6", + "gasUsed": "0x1a94a9", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "data": "0x00000000000000000000000000000000000000000000000000090542b117f710000000000000000000000000000000000000000000000000146536a47ee3569700000000000000000000000000000000000000000000104dbcf4202aa17c7521000000000000000000000000000000000000000000000000145c3161cdcb5f8700000000000000000000000000000000000000000000104dbcfd256d52946c31", + "blockHash": "0x91d6f03c614f51248f2fa2c1a927f77a189226af65b600ad3eeaba95537e1830", + "blockNumber": "0x24fbd75", + "transactionHash": "0x314be895ae55ffdd298f0136cb3c86d4dca1eed2c3b8dfb20eb4b227287b87e8", + "transactionIndex": "0x24", + "logIndex": "0xa4", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x56e0989f" + }, + { + "transactionHash": "0x29c6538b755ed3054352a6b92177409f8a013da3cfaea434a850ea08d1c8e647", + "transactionIndex": "0x25", + "blockHash": "0x91d6f03c614f51248f2fa2c1a927f77a189226af65b600ad3eeaba95537e1830", + "blockNumber": "0x24fbd75", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x7f95f3", + "gasUsed": "0xa230d", + "contractAddress": null, + "logs": [ + { + "address": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x91d6f03c614f51248f2fa2c1a927f77a189226af65b600ad3eeaba95537e1830", + "blockNumber": "0x24fbd75", + "transactionHash": "0x29c6538b755ed3054352a6b92177409f8a013da3cfaea434a850ea08d1c8e647", + "transactionIndex": "0x25", + "logIndex": "0xa5", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "data": "0x000000000000000000000000000000000000000000000000000370ab13e36f50000000000000000000000000000000000000000000000000145c3161cc3ca9a000000000000000000000000000000000000000000000104dbcfd256d52946c310000000000000000000000000000000000000000000000001458c0b6b8593a5000000000000000000000000000000000000000000000104dbd0096186677db81", + "blockHash": "0x91d6f03c614f51248f2fa2c1a927f77a189226af65b600ad3eeaba95537e1830", + "blockNumber": "0x24fbd75", + "transactionHash": "0x29c6538b755ed3054352a6b92177409f8a013da3cfaea434a850ea08d1c8e647", + "transactionIndex": "0x25", + "logIndex": "0xa6", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800001000000000000000110000000000200000000020000000000000000000800000000000000000080000000000000400000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000080000000000004000000000000000000001000000000000000000000000000000100000001020000000000000000000000000000000000000000000000000000000000200100000", + "type": "0x0", + "effectiveGasPrice": "0x56e0989f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691515320, + "chain": 80001, + "multi": false, + "commit": "95addde" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1691515779.json b/broadcast/DeployKernel.s.sol/80001/run-1691515779.json new file mode 100644 index 00000000..bd621e67 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1691515779.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058" + ], + "returns": {}, + "timestamp": 1691515779, + "chain": 80001, + "multi": false, + "commit": "95addde" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1691515785.json b/broadcast/DeployKernel.s.sol/80001/run-1691515785.json new file mode 100644 index 00000000..a3557be5 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1691515785.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionIndex": "0x1b", + "blockHash": "0x2072a740eb5d01f54ecb0a314ce2ab3428ef6e0c58aaa3ecceb6789f478371cc", + "blockNumber": "0x24fbe2c", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x3f6450", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000014581ff258d0871e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014581ff258d0871d0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x2072a740eb5d01f54ecb0a314ce2ab3428ef6e0c58aaa3ecceb6789f478371cc", + "blockNumber": "0x24fbe2c", + "transactionHash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionIndex": "0x1b", + "logIndex": "0x7c", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000009041dfa1e9dc475b48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009041dfa1e9dc475b49", + "blockHash": "0x2072a740eb5d01f54ecb0a314ce2ab3428ef6e0c58aaa3ecceb6789f478371cc", + "blockNumber": "0x24fbe2c", + "transactionHash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionIndex": "0x1b", + "logIndex": "0x7d", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x2072a740eb5d01f54ecb0a314ce2ab3428ef6e0c58aaa3ecceb6789f478371cc", + "blockNumber": "0x24fbe2c", + "transactionHash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionIndex": "0x1b", + "logIndex": "0x7e", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "data": "0x00000000000000000000000000000000000000000000000000006ded25461fa40000000000000000000000000000000000000000000000001458c0b6b7c12c8d00000000000000000000000000000000000000000000104dd3240ec165ee9685000000000000000000000000000000000000000000000000145852c9927b0ce900000000000000000000000000000000000000000000104dd3247cae8b34b629", + "blockHash": "0x2072a740eb5d01f54ecb0a314ce2ab3428ef6e0c58aaa3ecceb6789f478371cc", + "blockNumber": "0x24fbe2c", + "transactionHash": "0x1f4b33237a92b3f848a43afc6346f7ee23436e04edce6510503d439045197058", + "transactionIndex": "0x1b", + "logIndex": "0x7f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00080000000000000000000000000000000000000000000000000010000000000000000000000020000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000241000000000000000000000000000000000000000000000000002000000004000000000000000000001001000000000000040000000800000108000001000000100000000000000000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x56bede15" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691515785, + "chain": 80001, + "multi": false, + "commit": "95addde" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1691517538.json b/broadcast/DeployKernel.s.sol/80001/run-1691517538.json new file mode 100644 index 00000000..95ba1519 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1691517538.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x7c9dc5bc0bea4f4cab67f3b97734dcfef29e3be3e3d81cd9dd63193098bbecfe", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x7c9dc5bc0bea4f4cab67f3b97734dcfef29e3be3e3d81cd9dd63193098bbecfe" + ], + "returns": {}, + "timestamp": 1691517538, + "chain": 80001, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1691517545.json b/broadcast/DeployKernel.s.sol/80001/run-1691517545.json new file mode 100644 index 00000000..15610317 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1691517545.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0x7c9dc5bc0bea4f4cab67f3b97734dcfef29e3be3e3d81cd9dd63193098bbecfe", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x7c9dc5bc0bea4f4cab67f3b97734dcfef29e3be3e3d81cd9dd63193098bbecfe", + "transactionIndex": "0x1d", + "blockHash": "0x25de694995c671749e9005775d6fe88e01f3b6e6da92360b28131e4fd259af66", + "blockNumber": "0x24fc0ed", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x46d41e", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "data": "0x00000000000000000000000000000000000000000000000000003f58e31cfe000000000000000000000000000000000000000000000000001453449ef89aa24f00000000000000000000000000000000000000000000104e05fb33993489c61000000000000000000000000000000000000000000000000014530546157da44f00000000000000000000000000000000000000000000104e05fb72f217a6c410", + "blockHash": "0x25de694995c671749e9005775d6fe88e01f3b6e6da92360b28131e4fd259af66", + "blockNumber": "0x24fc0ed", + "transactionHash": "0x7c9dc5bc0bea4f4cab67f3b97734dcfef29e3be3e3d81cd9dd63193098bbecfe", + "transactionIndex": "0x1d", + "logIndex": "0xaa", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f11" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691517545, + "chain": 80001, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1692029918.json b/broadcast/DeployKernel.s.sol/80001/run-1692029918.json new file mode 100644 index 00000000..8758358f --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1692029918.json @@ -0,0 +1,98 @@ +{ + "transactions": [ + { + "hash": "0x87a42150aaceaf8bf0ccad99ff844ea18a9f73f901d71828f529ba50ac375621", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x9f231b30b29951938a4f57f72229708b59731dea1416050c26c28e20464b2353", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xec619", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b9938819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610acb90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c80630396cb60146101475780632569296214610142578063296601cd1461013d5780634d6cb700146101385780635414dff01461013357806354d1f13d1461012e578063584465f2146101295780636544c82814610124578063715018a61461011f5780638da5cb5b1461011a578063b0d691fe14610115578063bb30a97414610110578063bb9fe6bf1461010b578063c23a5cea14610106578063d7533f0214610101578063db4c545e146100fc578063f04e283e146100f7578063f2fde38b146100f25763fee81cf4146100ed57600080fd5b610777565b610737565b6106e1565b6106b8565b61069a565b61062b565b6105d5565b61057b565b610552565b610525565b6104de565b61049c565b610455565b61040e565b6103f0565b61036c565b610254565b6101c4565b600060203660031901126101c15760043563ffffffff81168091036101bd5761016e6107e7565b81546001600160a01b0316908290823b156101bd57602460405180948193621cb65b60e51b8352600483015234905af180156101b8576101ac575080f35b6101b59061097c565b80f35b610abf565b5080fd5b80fd5b6000806003193601126101c15763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b6001600160a01b0381160361022157565b600080fd5b9181601f840112156102215782359167ffffffffffffffff8311610221576020838186019501011161022157565b60603660031901126102215760043561026c81610210565b60243567ffffffffffffffff81116102215761028c903690600401610226565b6001600160a01b03831660009081526001602052604090205491929160ff161561031557610311926102f7926bffffffffffffffffffffffff60405160208101906102ed816102df60443589898761096c565b03601f1981018352826109a6565b51902016906109c8565b6040516001600160a01b0390911681529081906020820190565b0390f35b60405162461bcd60e51b815260206004820152602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b346102215760403660031901126102215760043567ffffffffffffffff8111610221576103de6bffffffffffffffffffffffff6103af6020933690600401610226565b6103d56040805183819489830196873781016024358982015203878101845201826109a6565b51902016610804565b6040516001600160a01b039091168152f35b346102215760203660031901126102215760206103de600435610804565b6000806003193601126101c15763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b346102215760203660031901126102215760043561047281610210565b61047a6107e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055005b34610221576020366003190112610221576004356104b981610210565b60018060a01b03166000526001602052602060ff604060002054166040519015158152f35b6000806003193601126101c1576104f36107e7565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b3461022157600036600319011261022157638b78c6d819546040516001600160a01b039091168152602090f35b34610221576000366003190112610221576000546040516001600160a01b039091168152602090f35b346102215760403660031901126102215760043561059881610210565b60243590811515809203610221576105ae6107e7565b60018060a01b0316600052600160205260406000209060ff80198354169116179055600080f35b34610221576000806003193601126101c1576105ef6107e7565b805481906001600160a01b0316803b1561062857819060046040518094819363bb9fe6bf60e01b83525af180156101b8576101ac575080f35b50fd5b3461022157600060203660031901126101c15760043561064a81610210565b6106526107e7565b81546001600160a01b0390811691839190833b156106965760249083604051958694859363611d2e7560e11b85521660048401525af180156101b8576101ac575080f35b8280fd5b346102215760003660031901126102215760206040516202a3008152f35b34610221576000366003190112610221576020608960136106d7610831565b0120604051908152f35b6020366003190112610221576004356106f981610210565b6107016107e7565b63389a75e1600c52806000526020600c20908154421161072957600061072792556107ae565b005b636f5e88186000526004601cfd5b60203660031901126102215760043561074f81610210565b6107576107e7565b8060601b1561076957610727906107ae565b637448fbae6000526004601cfd5b346102215760203660031901126102215760043561079481610210565b63389a75e1600c52600052602080600c2054604051908152f35b60018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b638b78c6d8195433036107f657565b6382b429006000526004601cfd5b60896013610810610831565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c156108d557666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b8260209493928237019081520190565b67ffffffffffffffff811161099057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761099057604052565b9291908060601c803314901517156109e6576109e3936109f4565b90565b632f6348366000526004601cfd5b91909392610a00610831565b906000928660896013850186f5966001600160a01b03881615610aa25750918184939284938784527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602085015260408401376040019034885af115610a87577f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818592a3565b3d15610a95573d81803e3d90fd5b633011642590526004601cfd5b93959650505050610ab39150610804565b90813b15610a95575090565b6040513d6000823e3d90fd0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc9e8838ca4e0a64b6aa9ff6c29c39353f5c8cf5975131b0d43c012fcdefa7349", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xa3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69", + "gas": "0xfa7a", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xa3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69", + "gas": "0x1bfef", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe8" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x87a42150aaceaf8bf0ccad99ff844ea18a9f73f901d71828f529ba50ac375621", + "0x9f231b30b29951938a4f57f72229708b59731dea1416050c26c28e20464b2353", + "0xc9e8838ca4e0a64b6aa9ff6c29c39353f5c8cf5975131b0d43c012fcdefa7349", + "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce" + ], + "returns": {}, + "timestamp": 1692029918, + "chain": 80001, + "multi": false, + "commit": "fde9e99" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1692029925.json b/broadcast/DeployKernel.s.sol/80001/run-1692029925.json new file mode 100644 index 00000000..17aa7705 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1692029925.json @@ -0,0 +1,287 @@ +{ + "transactions": [ + { + "hash": "0x87a42150aaceaf8bf0ccad99ff844ea18a9f73f901d71828f529ba50ac375621", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x9f231b30b29951938a4f57f72229708b59731dea1416050c26c28e20464b2353", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xec619", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b9938819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610acb90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c80630396cb60146101475780632569296214610142578063296601cd1461013d5780634d6cb700146101385780635414dff01461013357806354d1f13d1461012e578063584465f2146101295780636544c82814610124578063715018a61461011f5780638da5cb5b1461011a578063b0d691fe14610115578063bb30a97414610110578063bb9fe6bf1461010b578063c23a5cea14610106578063d7533f0214610101578063db4c545e146100fc578063f04e283e146100f7578063f2fde38b146100f25763fee81cf4146100ed57600080fd5b610777565b610737565b6106e1565b6106b8565b61069a565b61062b565b6105d5565b61057b565b610552565b610525565b6104de565b61049c565b610455565b61040e565b6103f0565b61036c565b610254565b6101c4565b600060203660031901126101c15760043563ffffffff81168091036101bd5761016e6107e7565b81546001600160a01b0316908290823b156101bd57602460405180948193621cb65b60e51b8352600483015234905af180156101b8576101ac575080f35b6101b59061097c565b80f35b610abf565b5080fd5b80fd5b6000806003193601126101c15763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b6001600160a01b0381160361022157565b600080fd5b9181601f840112156102215782359167ffffffffffffffff8311610221576020838186019501011161022157565b60603660031901126102215760043561026c81610210565b60243567ffffffffffffffff81116102215761028c903690600401610226565b6001600160a01b03831660009081526001602052604090205491929160ff161561031557610311926102f7926bffffffffffffffffffffffff60405160208101906102ed816102df60443589898761096c565b03601f1981018352826109a6565b51902016906109c8565b6040516001600160a01b0390911681529081906020820190565b0390f35b60405162461bcd60e51b815260206004820152602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b346102215760403660031901126102215760043567ffffffffffffffff8111610221576103de6bffffffffffffffffffffffff6103af6020933690600401610226565b6103d56040805183819489830196873781016024358982015203878101845201826109a6565b51902016610804565b6040516001600160a01b039091168152f35b346102215760203660031901126102215760206103de600435610804565b6000806003193601126101c15763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b346102215760203660031901126102215760043561047281610210565b61047a6107e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055005b34610221576020366003190112610221576004356104b981610210565b60018060a01b03166000526001602052602060ff604060002054166040519015158152f35b6000806003193601126101c1576104f36107e7565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b3461022157600036600319011261022157638b78c6d819546040516001600160a01b039091168152602090f35b34610221576000366003190112610221576000546040516001600160a01b039091168152602090f35b346102215760403660031901126102215760043561059881610210565b60243590811515809203610221576105ae6107e7565b60018060a01b0316600052600160205260406000209060ff80198354169116179055600080f35b34610221576000806003193601126101c1576105ef6107e7565b805481906001600160a01b0316803b1561062857819060046040518094819363bb9fe6bf60e01b83525af180156101b8576101ac575080f35b50fd5b3461022157600060203660031901126101c15760043561064a81610210565b6106526107e7565b81546001600160a01b0390811691839190833b156106965760249083604051958694859363611d2e7560e11b85521660048401525af180156101b8576101ac575080f35b8280fd5b346102215760003660031901126102215760206040516202a3008152f35b34610221576000366003190112610221576020608960136106d7610831565b0120604051908152f35b6020366003190112610221576004356106f981610210565b6107016107e7565b63389a75e1600c52806000526020600c20908154421161072957600061072792556107ae565b005b636f5e88186000526004601cfd5b60203660031901126102215760043561074f81610210565b6107576107e7565b8060601b1561076957610727906107ae565b637448fbae6000526004601cfd5b346102215760203660031901126102215760043561079481610210565b63389a75e1600c52600052602080600c2054604051908152f35b60018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b638b78c6d8195433036107f657565b6382b429006000526004601cfd5b60896013610810610831565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c156108d557666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b8260209493928237019081520190565b67ffffffffffffffff811161099057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761099057604052565b9291908060601c803314901517156109e6576109e3936109f4565b90565b632f6348366000526004601cfd5b91909392610a00610831565b906000928660896013850186f5966001600160a01b03881615610aa25750918184939284938784527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602085015260408401376040019034885af115610a87577f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818592a3565b3d15610a95573d81803e3d90fd5b633011642590526004601cfd5b93959650505050610ab39150610804565b90813b15610a95575090565b6040513d6000823e3d90fd0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xe6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc9e8838ca4e0a64b6aa9ff6c29c39353f5c8cf5975131b0d43c012fcdefa7349", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xa3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69", + "gas": "0xfa7a", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xa3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69", + "gas": "0x1bfef", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe8" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x87a42150aaceaf8bf0ccad99ff844ea18a9f73f901d71828f529ba50ac375621", + "transactionIndex": "0x2", + "blockHash": "0x18fe5c42b002a10e363d2fd8c4385fa628a16b4d44b67da483ae531bf22594c5", + "blockNumber": "0x252f5ab", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1fdf0a", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x000000000000000000000000000000000000000000000000000930499cb676fe00000000000000000000000000000000000000000000000014530546157198cd00000000000000000000000000000000000000000000128800663422376447df0000000000000000000000000000000000000000000000001449d4fc78bb21cf000000000000000000000000000000000000000000001288006f646bd41abedd", + "blockHash": "0x18fe5c42b002a10e363d2fd8c4385fa628a16b4d44b67da483ae531bf22594c5", + "blockNumber": "0x252f5ab", + "transactionHash": "0x87a42150aaceaf8bf0ccad99ff844ea18a9f73f901d71828f529ba50ac375621", + "transactionIndex": "0x2", + "logIndex": "0xb", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f16" + }, + { + "transactionHash": "0x9f231b30b29951938a4f57f72229708b59731dea1416050c26c28e20464b2353", + "transactionIndex": "0x1", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xc1fbb", + "gasUsed": "0xab22d", + "contractAddress": null, + "logs": [ + { + "address": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0x9f231b30b29951938a4f57f72229708b59731dea1416050c26c28e20464b2353", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x0000000000000000000000000000000000000000000000000003bc4bfe3e700e0000000000000000000000000000000000000000000000001449d4fc77162c7f0000000000000000000000000000000000000000000012880070a51b54c6f429000000000000000000000000000000000000000000000000144618b078d7bc710000000000000000000000000000000000000000000012880074616753056437", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0x9f231b30b29951938a4f57f72229708b59731dea1416050c26c28e20464b2353", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000100000000000000000800000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800001000000000000040100000000000200000000020000000000000000000800000000000000000080000000000000400000000000000000000000000000000000000000000000000000080000000000201000010000000000000000000000002000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f16" + }, + { + "transactionHash": "0xc9e8838ca4e0a64b6aa9ff6c29c39353f5c8cf5975131b0d43c012fcdefa7349", + "transactionIndex": "0x2", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "cumulativeGasUsed": "0xcd513", + "gasUsed": "0xb558", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x00000000000000000000000000000000000000000000000000003f55650f6810000000000000000000000000000000000000000000000000144618b0782c99a100000000000000000000000000000000000000000000128800746167530564370000000000000000000000000000000000000000000000001445d95b131d31910000000000000000000000000000000000000000000012880074a0bcb814cc47", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0xc9e8838ca4e0a64b6aa9ff6c29c39353f5c8cf5975131b0d43c012fcdefa7349", + "transactionIndex": "0x2", + "logIndex": "0x5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f16" + }, + { + "transactionHash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionIndex": "0x3", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0xA3A415a987b1Ae1afe28Ab77F9e9CB1D1DBb4D69", + "cumulativeGasUsed": "0xe1960", + "gasUsed": "0x1444d", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000a3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000014453ceab0967c87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014453ceab0967c860000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000a3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000091f1f26d0626bc04cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f1f26d0626bc04cc", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionIndex": "0x3", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000a3a415a987b1ae1afe28ab77f9e9cb1d1dbb4d69" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionIndex": "0x3", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x00000000000000000000000000000000000000000000000000007142bfd9bcce0000000000000000000000000000000000000000000000001445d95b1311dc110000000000000000000000000000000000000000000012880074a0bcb814cc470000000000000000000000000000000000000000000000001445681853381f43000000000000000000000000000000000000000000001288007511ff77ee8915", + "blockHash": "0x7e12662735d00adab9ce6e4b67a9b1bada0e5376dcc8de9a0f29d06581fa96a0", + "blockNumber": "0x252f5ac", + "transactionHash": "0x8ed57535ec9d22c3581713530518e7d4bf908214afe9e31017b46dfc592495ce", + "transactionIndex": "0x3", + "logIndex": "0x9", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000200100000000000108000002000000000000000000000000000000000000000000000000000800000000000001000040100000000000200000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000800000000000000000000080000000000201000000000000000000000000000000000000000000000000042000000004000000000000000000001000000000000000040000000800000108000000000000100000000000000000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f16" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692029925, + "chain": 80001, + "multi": false, + "commit": "fde9e99" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1692067755.json b/broadcast/DeployKernel.s.sol/80001/run-1692067755.json new file mode 100644 index 00000000..90a171d7 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1692067755.json @@ -0,0 +1,78 @@ +{ + "transactions": [ + { + "hash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xeb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843" + ], + "returns": {}, + "timestamp": 1692067755, + "chain": 80001, + "multi": false, + "commit": "1382d0c" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1692067761.json b/broadcast/DeployKernel.s.sol/80001/run-1692067761.json new file mode 100644 index 00000000..bd54b41d --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1692067761.json @@ -0,0 +1,235 @@ +{ + "transactions": [ + { + "hash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xeb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xdc8f9", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "logIndex": "0xc", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x00000000000000000000000000000000000000000000000000039ced6e30b50000000000000000000000000000000000000000000000000014405c003a883ac2000000000000000000000000000000000000000000000018dd272bffa3e33ffe000000000000000000000000000000000000000000000000143cbf12cc5785c2000000000000000000000000000000000000000000000018dd2ac8ed1213f4fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "logIndex": "0xd", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800001000000000000000100000000000200000000020000000000000000000800000000000000000080000000000000400000000000000000000000000080000000000000000000000000080000000000201000100000000000000000000000000000000000000000000000000000004000000000000000000001400000000000000000000000000000100000000020000000000000000080000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + }, + { + "transactionHash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionIndex": "0x4", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xe7e5b", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x00000000000000000000000000000000000000000000000000003f58e31cfe00000000000000000000000000000000000000000000000000143cbf12cbbc586d000000000000000000000000000000000000000000000018dd2ac8ed1213f4fe000000000000000000000000000000000000000000000000143c7fb9e89f5a6d000000000000000000000000000000000000000000000018dd2b0845f530f2fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionIndex": "0x4", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + }, + { + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xfc2c4", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000143bda06d7a5cff20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143bda06d7a5cff10000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0xf", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000091e737cda26879304f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e737cda268793050", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x0000000000000000000000000000000000000000000000000000714c87374700000000000000000000000000000000000000000000000000143c7fb9e894b9af000000000000000000000000000000000000000000000018dd2b0845f530f2fe000000000000000000000000000000000000000000000000143c0e6d615d72af000000000000000000000000000000000000000000000018dd2b79927c6839fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x12", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000820000000000000002000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000002000000004000000000000000000001000000000000000040000000800000108000000000000100000000000080000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692067761, + "chain": 80001, + "multi": false, + "commit": "1382d0c" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-1692067762.json b/broadcast/DeployKernel.s.sol/80001/run-1692067762.json new file mode 100644 index 00000000..963a94fb --- /dev/null +++ b/broadcast/DeployKernel.s.sol/80001/run-1692067762.json @@ -0,0 +1,235 @@ +{ + "transactions": [ + { + "hash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xeb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xdc8f9", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "logIndex": "0xc", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x00000000000000000000000000000000000000000000000000039ced6e30b50000000000000000000000000000000000000000000000000014405c003a883ac2000000000000000000000000000000000000000000000018dd272bffa3e33ffe000000000000000000000000000000000000000000000000143cbf12cc5785c2000000000000000000000000000000000000000000000018dd2ac8ed1213f4fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "logIndex": "0xd", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800001000000000000000100000000000200000000020000000000000000000800000000000000000080000000000000400000000000000000000000000080000000000000000000000000080000000000201000100000000000000000000000000000000000000000000000000000004000000000000000000001400000000000000000000000000000100000000020000000000000000080000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + }, + { + "transactionHash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionIndex": "0x4", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xe7e5b", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x00000000000000000000000000000000000000000000000000003f58e31cfe00000000000000000000000000000000000000000000000000143cbf12cbbc586d000000000000000000000000000000000000000000000018dd2ac8ed1213f4fe000000000000000000000000000000000000000000000000143c7fb9e89f5a6d000000000000000000000000000000000000000000000018dd2b0845f530f2fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionIndex": "0x4", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + }, + { + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xfc2c4", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000143bda06d7a5cff20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143bda06d7a5cff10000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0xf", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000091e737cda26879304f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e737cda268793050", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x0000000000000000000000000000000000000000000000000000714c87374700000000000000000000000000000000000000000000000000143c7fb9e894b9af000000000000000000000000000000000000000000000018dd2b0845f530f2fe000000000000000000000000000000000000000000000000143c0e6d615d72af000000000000000000000000000000000000000000000018dd2b79927c6839fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x12", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000820000000000000002000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000002000000004000000000000000000001000000000000000040000000800000108000000000000100000000000080000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692067762, + "chain": 80001, + "multi": false, + "commit": "1382d0c" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/80001/run-latest.json b/broadcast/DeployKernel.s.sol/80001/run-latest.json index e38f0309..05f5b13b 100644 --- a/broadcast/DeployKernel.s.sol/80001/run-latest.json +++ b/broadcast/DeployKernel.s.sol/80001/run-latest.json @@ -1,45 +1,135 @@ { "transactions": [ { - "hash": "0xc956eb87fe6d911b5e8f92967ec97ff0dbddae46c63397133787506029ed91f0", - "transactionType": "CREATE", + "hash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionType": "CREATE2", "contractName": "KernelFactory", - "contractAddress": "0x1Afb5869e4e7d1023D5dEB324e9f869de0B571Db", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", "function": null, "arguments": [ "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" ], - "rpc": "https://polygon-mumbai.infura.io/v3/c7efe98b44ba49a9a44b2933f52d3724", "transaction": { - "type": "0x02", + "type": "0x00", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", - "gas": "0x261d64", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", "value": "0x0", - "data": "0x60a060405234801561001057600080fd5b506040516123d83803806123d883398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b611ae3806108f583390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b60805161080e6100e760003960008181604b0152818161012c0152818161024b01526102d6015261080e6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063037637aa146100465780630d253d76146100895780635fbfb9cf1461009c575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006d6100973660046103cd565b6100af565b61006d6100aa3660046103cd565b6101cc565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506101c28160405180602001610106906103c0565b601f1982820381018352601f9091011660408190526001600160a01b03881660248201527f0000000000000000000000000000000000000000000000000000000000000000906044015b60408051601f19818403018152918152602080830180516001600160e01b031663189acdbd60e31b179052905161018993929101610429565b60408051601f19818403018152908290526101a7929160200161046b565b60405160208183030381529060405280519060200120610382565b9150505b92915050565b6040516bffffffffffffffffffffffff19606084901b16602082015260348101829052600090819060540160405160208183030381529060405280519060200120905060006102738260405180602001610225906103c0565b601f1982820381018352601f9091011660408190526001600160a01b03891660248201527f000000000000000000000000000000000000000000000000000000000000000090604401610150565b90506001600160a01b0381163b1561028e5791506101c69050565b604080516001600160a01b03871660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663189acdbd60e31b179052905183917f0000000000000000000000000000000000000000000000000000000000000000916102ff906103c0565b61030a929190610429565b8190604051809103906000f590508015801561032a573d6000803e3d6000fd5b509250846001600160a01b0316836001600160a01b03167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff8660405161037291815260200190565b60405180910390a3505092915050565b600061038f838330610396565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61033e8061049b83390190565b600080604083850312156103e057600080fd5b82356001600160a01b03811681146103f757600080fd5b946020939093013593505050565b60005b83811015610420578181015183820152602001610408565b50506000910152565b60018060a01b03831681526040602082015260008251806040840152610456816060850160208701610405565b601f01601f1916919091016060019392505050565b6000835161047d818460208801610405565b835190830190610491818360208801610405565b0194935050505056fe608060405260405161033e38038061033e833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6088806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fdfea26469706673582212209ab230fd9f4b12869e156e6154e1bc27a4d5b40951f1a135df8af03fdc09b1e964736f6c63430008130033a26469706673582212201855d12958a074b7ee8c5ec91dfd168ca17f21b5f65881a239a8e4ba47751c4964736f6c634300081300336101606040523480156200001257600080fd5b5060405162001ae338038062001ae3833981016040819052620000359162000186565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264302e302e3160d81b908201529151902060e08190527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc1991638118856101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000150565b80546001600160a01b0319166001600160a01b039290921691909117905550620001da9050565b6000806200018060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001b8565b92915050565b6000602082840312156200019957600080fd5b81516001600160a01b0381168114620001b157600080fd5b9392505050565b818103818111156200018057634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516118996200024a6000396000818161025f015281816103c40152818161048e01526107fc01526000610ef701526000610f4601526000610f2101526000610e7a01526000610ea401526000610ece01526118996000f3fe6080604052600436106100c65760003560e01c8063893d20e81161007f578063bc197c8111610059578063bc197c8114610281578063c4d66de8146102b0578063f23a6e61146102d0578063f333df55146102fd57600080fd5b8063893d20e814610200578063940d3c601461022d578063b0d691fe1461024d57600080fd5b806306fdde03146100d2578063150b7a021461011a5780631626ba7e1461015f5780633659cfe61461017f5780633a871cdd146101a157806354fd4d50146101cf57600080fd5b366100cd57005b600080fd5b3480156100de57600080fd5b506101046040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610111919061109e565b60405180910390f35b34801561012657600080fd5b5061014661013536600461110e565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610111565b34801561016b57600080fd5b5061014661017a36600461121e565b61031d565b34801561018b57600080fd5b5061019f61019a366004611264565b6103b9565b005b3480156101ad57600080fd5b506101c16101bc36600461127f565b610481565b604051908152602001610111565b3480156101db57600080fd5b5061010460405180604001604052806005815260200164302e302e3160d81b81525081565b34801561020c57600080fd5b506102156107d8565b6040516001600160a01b039091168152602001610111565b34801561023957600080fd5b5061019f6102483660046112d2565b6107f1565b34801561025957600080fd5b506102157f000000000000000000000000000000000000000000000000000000000000000081565b34801561028d57600080fd5b5061014661029c36600461138b565b63bc197c8160e01b98975050505050505050565b3480156102bc57600080fd5b5061019f6102cb366004611264565b610918565b3480156102dc57600080fd5b506101466102eb366004611445565b63f23a6e6160e01b9695505050505050565b34801561030957600080fd5b5061019f6103183660046114bc565b61099d565b600080610328610a0d565b90506103348484610a3b565b81546001600160a01b039182169116036103585750630b135d3f60e11b90506103b3565b600061036385610a5f565b905060006103718286610a3b565b83549091506001600160a01b0380831691160361039b5750630b135d3f60e11b92506103b3915050565b506001600160e01b031992506103b3915050565b5050505b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061040057506103f3610a0d565b546001600160a01b031633145b6104255760405162461bcd60e51b815260040161041c9061150e565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104fb5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161041c565b610509610140850185611553565b90506041036105235761051c8484610ab2565b905061077f565b6061610533610140860186611553565b9050111561076657600061054b610140860186611553565b61055a91601491600091611599565b610563916115c3565b60601c90506000610578610140870187611553565b61058791601a91601491611599565b610590916115f8565b60d01c905060006105a5610140880188611553565b6105b491602091601a91611599565b6105bd916115f8565b60d01c905060006105d2610140890189611553565b6105e191606191602091611599565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939450610626925050506101408a018a611553565b610634916061908290611599565b8101906106419190611626565b508051602080830191909120604080517f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3938101939093526001600160a01b0389169083015265ffffffffffff80881660608401528616608083015260a08201529091506000906106ca9060c00160405160208183030381529060405280519060200120610b69565b905060006106d88285610a3b565b9050806001600160a01b03166106ec610a0d565b546001600160a01b03161461070b5760019750505050505050506107d1565b6000610719888d8d8d610bb7565b9050600081806020019051810190610731919061167f565b90508061074a57600199505050505050505050506107d1565b61075681158989610c35565b995050505050505050505061077f565b604051634be6321b60e01b815260040160405180910390fd5b81156107d157604051600090339084908381818185875af1925050503d80600081146107c7576040519150601f19603f3d011682016040523d82523d6000602084013e6107cc565b606091505b505050505b9392505050565b60006107e2610a0d565b546001600160a01b0316919050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610838575061082b610a0d565b546001600160a01b031633145b6108545760405162461bcd60e51b815260040161041c9061150e565b60006060600183600181111561086c5761086c6116a1565b036108bb576108b18786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6d92505050565b9092509050610902565b6108fc878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ca392505050565b90925090505b8161090f57805160208201fd5b50505050505050565b6000610922610a0d565b80549091506001600160a01b03161561097d5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161041c565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806109e08585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6d92505050565b915091508115610a05578060405163a52b216960e01b815260040161041c919061109e565b805160208201fd5b6000806103b360017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96116b7565b6000806000610a4a8585610cdb565b91509150610a5781610d20565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b600080610abd610a0d565b9050610b0b83610ad1610140870187611553565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a3b92505050565b81546001600160a01b03918216911603610b2557506103b3565b6000610b3084610a5f565b90506000610b4682610ad1610140890189611553565b83549091506001600160a01b038083169116146103af57600193505050506103b3565b60006103b3610b76610e6d565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60606000639e2045ce60e01b858585604051602401610bd893929190611746565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600080610c198884610c6d565b9150915081610c2a57805160208201fd5b979650505050505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610c5d576000610c60565b60015b60ff161717949350505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b6000808251604103610d115760208301516040840151606085015160001a610d0587828585610f94565b94509450505050610d19565b506000905060025b9250929050565b6000816004811115610d3457610d346116a1565b03610d3c5750565b6001816004811115610d5057610d506116a1565b03610d9d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161041c565b6002816004811115610db157610db16116a1565b03610dfe5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161041c565b6003816004811115610e1257610e126116a1565b03610e6a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161041c565b50565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ec657507f000000000000000000000000000000000000000000000000000000000000000046145b15610ef057507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610fcb575060009050600361104f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561101f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166110485760006001925092505061104f565b9150600090505b94509492505050565b6000815180845260005b8181101561107e57602081850181015186830182015201611062565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107d16020830184611058565b80356001600160a01b03811681146110c857600080fd5b919050565b60008083601f8401126110df57600080fd5b5081356001600160401b038111156110f657600080fd5b602083019150836020828501011115610d1957600080fd5b60008060008060006080868803121561112657600080fd5b61112f866110b1565b945061113d602087016110b1565b93506040860135925060608601356001600160401b0381111561115f57600080fd5b61116b888289016110cd565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126111a357600080fd5b81356001600160401b03808211156111bd576111bd61117c565b604051601f8301601f19908116603f011681019082821181831017156111e5576111e561117c565b816040528381528660208588010111156111fe57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561123157600080fd5b8235915060208301356001600160401b0381111561124e57600080fd5b61125a85828601611192565b9150509250929050565b60006020828403121561127657600080fd5b6107d1826110b1565b60008060006060848603121561129457600080fd5b83356001600160401b038111156112aa57600080fd5b840161016081870312156112bd57600080fd5b95602085013595506040909401359392505050565b6000806000806000608086880312156112ea57600080fd5b6112f3866110b1565b94506020860135935060408601356001600160401b0381111561131557600080fd5b611321888289016110cd565b90945092505060608601356002811061133957600080fd5b809150509295509295909350565b60008083601f84011261135957600080fd5b5081356001600160401b0381111561137057600080fd5b6020830191508360208260051b8501011115610d1957600080fd5b60008060008060008060008060a0898b0312156113a757600080fd5b6113b0896110b1565b97506113be60208a016110b1565b965060408901356001600160401b03808211156113da57600080fd5b6113e68c838d01611347565b909850965060608b01359150808211156113ff57600080fd5b61140b8c838d01611347565b909650945060808b013591508082111561142457600080fd5b506114318b828c016110cd565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561145e57600080fd5b611467876110b1565b9550611475602088016110b1565b9450604087013593506060870135925060808701356001600160401b0381111561149e57600080fd5b6114aa89828a016110cd565b979a9699509497509295939492505050565b6000806000604084860312156114d157600080fd5b6114da846110b1565b925060208401356001600160401b038111156114f557600080fd5b611501868287016110cd565b9497909650939450505050565b60208082526025908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526437bbb732b960d91b606082015260800190565b6000808335601e1984360301811261156a57600080fd5b8301803591506001600160401b0382111561158457600080fd5b602001915036819003821315610d1957600080fd5b600080858511156115a957600080fd5b838611156115b657600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156115f05780818660140360031b1b83161692505b505092915050565b6001600160d01b031981358181169160068510156115f05760069490940360031b84901b1690921692915050565b6000806040838503121561163957600080fd5b82356001600160401b038082111561165057600080fd5b61165c86838701611192565b9350602085013591508082111561167257600080fd5b5061125a85828601611192565b60006020828403121561169157600080fd5b815180151581146107d157600080fd5b634e487b7160e01b600052602160045260246000fd5b818103818111156103b357634e487b7160e01b600052601160045260246000fd5b6000808335601e198436030181126116ef57600080fd5b83016020810192503590506001600160401b0381111561170e57600080fd5b803603821315610d1957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526117676060820161175a866110b1565b6001600160a01b03169052565b60208401356080820152600061178060408601866116d8565b6101608060a08601526117986101c08601838561171d565b92506117a760608901896116d8565b9250605f19808786030160c08801526117c185858461171d565b945060808a013560e0880152610100935060a08a013584880152610120915060c08a01358288015261014060e08b013581890152848b013584890152611809838c018c6116d8565b95509350818887030161018089015261182386868661171d565b9550611831818c018c6116d8565b955093505080878603016101a0880152505061184e83838361171d565b6020860197909752505050506040015291905056fea264697066735822122034a298bc5764b008c2c8a88bc435affe2b7af4b0784ad3e6cc65ddcf18afc79764736f6c634300081300330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", - "nonce": "0x8", - "accessList": [] + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xeb" }, "additionalContracts": [ { - "transactionType": "CREATE", - "address": "0x0a5E9C6d689be2f0B35724ADb8633647D4c2Cefb", - "initCode": "6101606040523480156200001257600080fd5b5060405162001ae338038062001ae3833981016040819052620000359162000186565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264302e302e3160d81b908201529151902060e08190527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc1991638118856101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000150565b80546001600160a01b0319166001600160a01b039290921691909117905550620001da9050565b6000806200018060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001b8565b92915050565b6000602082840312156200019957600080fd5b81516001600160a01b0381168114620001b157600080fd5b9392505050565b818103818111156200018057634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516118996200024a6000396000818161025f015281816103c40152818161048e01526107fc01526000610ef701526000610f4601526000610f2101526000610e7a01526000610ea401526000610ece01526118996000f3fe6080604052600436106100c65760003560e01c8063893d20e81161007f578063bc197c8111610059578063bc197c8114610281578063c4d66de8146102b0578063f23a6e61146102d0578063f333df55146102fd57600080fd5b8063893d20e814610200578063940d3c601461022d578063b0d691fe1461024d57600080fd5b806306fdde03146100d2578063150b7a021461011a5780631626ba7e1461015f5780633659cfe61461017f5780633a871cdd146101a157806354fd4d50146101cf57600080fd5b366100cd57005b600080fd5b3480156100de57600080fd5b506101046040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610111919061109e565b60405180910390f35b34801561012657600080fd5b5061014661013536600461110e565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610111565b34801561016b57600080fd5b5061014661017a36600461121e565b61031d565b34801561018b57600080fd5b5061019f61019a366004611264565b6103b9565b005b3480156101ad57600080fd5b506101c16101bc36600461127f565b610481565b604051908152602001610111565b3480156101db57600080fd5b5061010460405180604001604052806005815260200164302e302e3160d81b81525081565b34801561020c57600080fd5b506102156107d8565b6040516001600160a01b039091168152602001610111565b34801561023957600080fd5b5061019f6102483660046112d2565b6107f1565b34801561025957600080fd5b506102157f000000000000000000000000000000000000000000000000000000000000000081565b34801561028d57600080fd5b5061014661029c36600461138b565b63bc197c8160e01b98975050505050505050565b3480156102bc57600080fd5b5061019f6102cb366004611264565b610918565b3480156102dc57600080fd5b506101466102eb366004611445565b63f23a6e6160e01b9695505050505050565b34801561030957600080fd5b5061019f6103183660046114bc565b61099d565b600080610328610a0d565b90506103348484610a3b565b81546001600160a01b039182169116036103585750630b135d3f60e11b90506103b3565b600061036385610a5f565b905060006103718286610a3b565b83549091506001600160a01b0380831691160361039b5750630b135d3f60e11b92506103b3915050565b506001600160e01b031992506103b3915050565b5050505b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061040057506103f3610a0d565b546001600160a01b031633145b6104255760405162461bcd60e51b815260040161041c9061150e565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104fb5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161041c565b610509610140850185611553565b90506041036105235761051c8484610ab2565b905061077f565b6061610533610140860186611553565b9050111561076657600061054b610140860186611553565b61055a91601491600091611599565b610563916115c3565b60601c90506000610578610140870187611553565b61058791601a91601491611599565b610590916115f8565b60d01c905060006105a5610140880188611553565b6105b491602091601a91611599565b6105bd916115f8565b60d01c905060006105d2610140890189611553565b6105e191606191602091611599565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939450610626925050506101408a018a611553565b610634916061908290611599565b8101906106419190611626565b508051602080830191909120604080517f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3938101939093526001600160a01b0389169083015265ffffffffffff80881660608401528616608083015260a08201529091506000906106ca9060c00160405160208183030381529060405280519060200120610b69565b905060006106d88285610a3b565b9050806001600160a01b03166106ec610a0d565b546001600160a01b03161461070b5760019750505050505050506107d1565b6000610719888d8d8d610bb7565b9050600081806020019051810190610731919061167f565b90508061074a57600199505050505050505050506107d1565b61075681158989610c35565b995050505050505050505061077f565b604051634be6321b60e01b815260040160405180910390fd5b81156107d157604051600090339084908381818185875af1925050503d80600081146107c7576040519150601f19603f3d011682016040523d82523d6000602084013e6107cc565b606091505b505050505b9392505050565b60006107e2610a0d565b546001600160a01b0316919050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610838575061082b610a0d565b546001600160a01b031633145b6108545760405162461bcd60e51b815260040161041c9061150e565b60006060600183600181111561086c5761086c6116a1565b036108bb576108b18786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6d92505050565b9092509050610902565b6108fc878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ca392505050565b90925090505b8161090f57805160208201fd5b50505050505050565b6000610922610a0d565b80549091506001600160a01b03161561097d5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161041c565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806109e08585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6d92505050565b915091508115610a05578060405163a52b216960e01b815260040161041c919061109e565b805160208201fd5b6000806103b360017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96116b7565b6000806000610a4a8585610cdb565b91509150610a5781610d20565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b600080610abd610a0d565b9050610b0b83610ad1610140870187611553565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a3b92505050565b81546001600160a01b03918216911603610b2557506103b3565b6000610b3084610a5f565b90506000610b4682610ad1610140890189611553565b83549091506001600160a01b038083169116146103af57600193505050506103b3565b60006103b3610b76610e6d565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60606000639e2045ce60e01b858585604051602401610bd893929190611746565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600080610c198884610c6d565b9150915081610c2a57805160208201fd5b979650505050505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610c5d576000610c60565b60015b60ff161717949350505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b6000808251604103610d115760208301516040840151606085015160001a610d0587828585610f94565b94509450505050610d19565b506000905060025b9250929050565b6000816004811115610d3457610d346116a1565b03610d3c5750565b6001816004811115610d5057610d506116a1565b03610d9d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161041c565b6002816004811115610db157610db16116a1565b03610dfe5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161041c565b6003816004811115610e1257610e126116a1565b03610e6a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161041c565b50565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ec657507f000000000000000000000000000000000000000000000000000000000000000046145b15610ef057507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610fcb575060009050600361104f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561101f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166110485760006001925092505061104f565b9150600090505b94509492505050565b6000815180845260005b8181101561107e57602081850181015186830182015201611062565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107d16020830184611058565b80356001600160a01b03811681146110c857600080fd5b919050565b60008083601f8401126110df57600080fd5b5081356001600160401b038111156110f657600080fd5b602083019150836020828501011115610d1957600080fd5b60008060008060006080868803121561112657600080fd5b61112f866110b1565b945061113d602087016110b1565b93506040860135925060608601356001600160401b0381111561115f57600080fd5b61116b888289016110cd565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126111a357600080fd5b81356001600160401b03808211156111bd576111bd61117c565b604051601f8301601f19908116603f011681019082821181831017156111e5576111e561117c565b816040528381528660208588010111156111fe57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561123157600080fd5b8235915060208301356001600160401b0381111561124e57600080fd5b61125a85828601611192565b9150509250929050565b60006020828403121561127657600080fd5b6107d1826110b1565b60008060006060848603121561129457600080fd5b83356001600160401b038111156112aa57600080fd5b840161016081870312156112bd57600080fd5b95602085013595506040909401359392505050565b6000806000806000608086880312156112ea57600080fd5b6112f3866110b1565b94506020860135935060408601356001600160401b0381111561131557600080fd5b611321888289016110cd565b90945092505060608601356002811061133957600080fd5b809150509295509295909350565b60008083601f84011261135957600080fd5b5081356001600160401b0381111561137057600080fd5b6020830191508360208260051b8501011115610d1957600080fd5b60008060008060008060008060a0898b0312156113a757600080fd5b6113b0896110b1565b97506113be60208a016110b1565b965060408901356001600160401b03808211156113da57600080fd5b6113e68c838d01611347565b909850965060608b01359150808211156113ff57600080fd5b61140b8c838d01611347565b909650945060808b013591508082111561142457600080fd5b506114318b828c016110cd565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561145e57600080fd5b611467876110b1565b9550611475602088016110b1565b9450604087013593506060870135925060808701356001600160401b0381111561149e57600080fd5b6114aa89828a016110cd565b979a9699509497509295939492505050565b6000806000604084860312156114d157600080fd5b6114da846110b1565b925060208401356001600160401b038111156114f557600080fd5b611501868287016110cd565b9497909650939450505050565b60208082526025908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526437bbb732b960d91b606082015260800190565b6000808335601e1984360301811261156a57600080fd5b8301803591506001600160401b0382111561158457600080fd5b602001915036819003821315610d1957600080fd5b600080858511156115a957600080fd5b838611156115b657600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156115f05780818660140360031b1b83161692505b505092915050565b6001600160d01b031981358181169160068510156115f05760069490940360031b84901b1690921692915050565b6000806040838503121561163957600080fd5b82356001600160401b038082111561165057600080fd5b61165c86838701611192565b9350602085013591508082111561167257600080fd5b5061125a85828601611192565b60006020828403121561169157600080fd5b815180151581146107d157600080fd5b634e487b7160e01b600052602160045260246000fd5b818103818111156103b357634e487b7160e01b600052601160045260246000fd5b6000808335601e198436030181126116ef57600080fd5b83016020810192503590506001600160401b0381111561170e57600080fd5b803603821315610d1957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526117676060820161175a866110b1565b6001600160a01b03169052565b60208401356080820152600061178060408601866116d8565b6101608060a08601526117986101c08601838561171d565b92506117a760608901896116d8565b9250605f19808786030160c08801526117c185858461171d565b945060808a013560e0880152610100935060a08a013584880152610120915060c08a01358288015261014060e08b013581890152848b013584890152611809838c018c6116d8565b95509350818887030161018089015261182386868661171d565b9550611831818c018c6116d8565b955093505080878603016101a0880152505061184e83838361171d565b6020860197909752505050506040015291905056fea264697066735822122034a298bc5764b008c2c8a88bc435affe2b7af4b0784ad3e6cc65ddcf18afc79764736f6c634300081300330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + "transactionType": "CREATE2", + "address": "0x180D6465F921C7E0DEA0040107D342c87455fFF5", + "initCode": "608060405234801561001057600080fd5b50610863806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c57806320709efc14610071578063333daf92146100b75780633a871cdd146100d85780638fc925aa146100eb575b600080fd5b61006f61006a36600461069c565b61011a565b005b61009a61007f3660046106de565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ca6100c5366004610707565b61019a565b6040519081526020016100ae565b6100ca6100e6366004610753565b610297565b61006f6100f936600461069c565b505033600090815260208190526040902080546001600160a01b0319169055565b600061012960148284866107a7565b610132916107d1565b3360008181526020819052604080822080546001600160a01b0319811660609690961c95861790915590519394506001600160a01b0316928492849290917f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053319190a450505050565b33600090815260208181526040808320548151601f86018490048402810184019092528482526001600160a01b0316916101f0918791879087908190840183828082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610212576000915050610290565b600061021d866103ac565b905060006102618287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b9050806001600160a01b0316836001600160a01b0316146102885760019350505050610290565b600093505050505b9392505050565b60008080806102a960208801886106de565b6001600160a01b039081168252602082019290925260400160002054169050610314846102da610140880188610806565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038892505050565b6001600160a01b0316816001600160a01b031603610336576000915050610290565b6000610341856103ac565b90506000610357826102da6101408a018a610806565b9050806001600160a01b0316836001600160a01b03161461037e5760019350505050610290565b5050509392505050565b600080600061039785856103ff565b915091506103a481610444565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008082516041036104355760208301516040840151606085015160001a61042987828585610596565b9450945050505061043d565b506000905060025b9250929050565b60008160048111156104585761045861084d565b036104605750565b60018160048111156104745761047461084d565b036104c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156104da576104da61084d565b036105275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104bd565b600381600481111561053b5761053b61084d565b036105935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104bd565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156105cd5750600090506003610651565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661064a57600060019250925050610651565b9150600090505b94509492505050565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b60208301915083602082850101111561043d57600080fd5b600080602083850312156106af57600080fd5b823567ffffffffffffffff8111156106c657600080fd5b6106d28582860161065a565b90969095509350505050565b6000602082840312156106f057600080fd5b81356001600160a01b038116811461029057600080fd5b60008060006040848603121561071c57600080fd5b83359250602084013567ffffffffffffffff81111561073a57600080fd5b6107468682870161065a565b9497909650939450505050565b60008060006060848603121561076857600080fd5b833567ffffffffffffffff81111561077f57600080fd5b8401610160818703121561079257600080fd5b95602085013595506040909401359392505050565b600080858511156107b757600080fd5b838611156107c457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156107fe5780818660140360031b1b83161692505b505092915050565b6000808335601e1984360301811261081d57600080fd5b83018035915067ffffffffffffffff82111561083857600080fd5b60200191503681900382131561043d57600080fd5b634e487b7160e01b600052602160045260246000fd" } ], "isFixedGasLimit": false + }, + { + "hash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xec" + }, + "additionalContracts": [], + "isFixedGasLimit": false } ], "receipts": [ { - "transactionHash": "0xc956eb87fe6d911b5e8f92967ec97ff0dbddae46c63397133787506029ed91f0", - "transactionIndex": "0x0", - "blockHash": "0x108fd9449710366ca1875c18ca909f4441b534353832c2039231095a9cd3a81a", - "blockNumber": "0x20a0bd2", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xdc8f9", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "logIndex": "0xc", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x00000000000000000000000000000000000000000000000000039ced6e30b50000000000000000000000000000000000000000000000000014405c003a883ac2000000000000000000000000000000000000000000000018dd272bffa3e33ffe000000000000000000000000000000000000000000000000143cbf12cc5785c2000000000000000000000000000000000000000000000018dd2ac8ed1213f4fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0x0851c13b961617f7b1d221cc342e5077419c03b0094ff123965ee2e2bd529506", + "transactionIndex": "0x3", + "logIndex": "0xd", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800001000000000000000100000000000200000000020000000000000000000800000000000000000080000000000000400000000000000000000000000080000000000000000000000000080000000000201000100000000000000000000000000000000000000000000000000000004000000000000000000001400000000000000000000000000000100000000020000000000000000080000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + }, + { + "transactionHash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionIndex": "0x4", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", - "to": null, - "cumulativeGasUsed": "0x1d51b0", - "gasUsed": "0x1d51b0", - "contractAddress": "0x1Afb5869e4e7d1023D5dEB324e9f869de0B571Db", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xe7e5b", + "gasUsed": "0xb562", + "contractAddress": null, "logs": [ { "address": "0x0000000000000000000000000000000000001010", @@ -47,29 +137,108 @@ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", "0x0000000000000000000000000000000000000000000000000000000000001010", "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", - "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "data": "0x00000000000000000000000000000000000000000000000000003f58e31cfe00000000000000000000000000000000000000000000000000143cbf12cbbc586d000000000000000000000000000000000000000000000018dd2ac8ed1213f4fe000000000000000000000000000000000000000000000000143c7fb9e89f5a6d000000000000000000000000000000000000000000000018dd2b0845f530f2fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xddaeff7b732e00a1922657fd8c9486f1aae36924bae965399b8d405179009da5", + "transactionIndex": "0x4", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" + }, + { + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xfc2c4", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000143bda06d7a5cff20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143bda06d7a5cff10000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0xf", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000091e737cda26879304f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e737cda268793050", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" ], - "data": "0x000000000000000000000000000000000000000000000000002221c52df096b000000000000000000000000000000000000000000000000001eac851fadc4b7a0000000000000000000000000000000000000000000005dce5f806daeebffe6a00000000000000000000000000000000000000000000000001c8a68cccebb4ca0000000000000000000000000000000000000000000005dce61a28a01cb0951a", - "blockHash": "0x108fd9449710366ca1875c18ca909f4441b534353832c2039231095a9cd3a81a", - "blockNumber": "0x20a0bd2", - "transactionHash": "0xc956eb87fe6d911b5e8f92967ec97ff0dbddae46c63397133787506029ed91f0", - "transactionIndex": "0x0", - "logIndex": "0x0", + "data": "0x0000000000000000000000000000000000000000000000000000714c87374700000000000000000000000000000000000000000000000000143c7fb9e894b9af000000000000000000000000000000000000000000000018dd2b0845f530f2fe000000000000000000000000000000000000000000000000143c0e6d615d72af000000000000000000000000000000000000000000000018dd2b79927c6839fe", + "blockHash": "0xc73223146cb1ad21c39bcb56f4b4379100772771e65cac4a291c60c3239df20d", + "blockNumber": "0x253326b", + "transactionHash": "0xcc30f64ef12ecb53b53291feaef7d569de3ecb267f1f0cc5963bf78d8f16a843", + "transactionIndex": "0x5", + "logIndex": "0x12", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0x12a05f200" + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000820000000000000002000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000002000000004000000000000000000001000000000000000040000000800000108000000000000100000000000080000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f0f" } ], "libraries": [], "pending": [], "path": "/Users/leekt/workspace/zerodevapp/zerodev-wallet-kernel/broadcast/DeployKernel.s.sol/80001/run-latest.json", "returns": {}, - "timestamp": 1681156960, + "timestamp": 1692067762, "chain": 80001, "multi": false, - "commit": "48f665e" + "commit": "1382d0c" } \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/8453/run-1692129323.json b/broadcast/DeployKernel.s.sol/8453/run-1692129323.json new file mode 100644 index 00000000..44dc8bd6 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/8453/run-1692129323.json @@ -0,0 +1,79 @@ +{ + "transactions": [ + { + "hash": "0xb8a25d22b4fcd96aa1aeaffa492edff94045844b97a8ac8e23f4d24d832e66b1", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe92aea50660f7ba4a027ccaf0aadd3babf24c9e2dda45e35dab3278e30ea523c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xb8a25d22b4fcd96aa1aeaffa492edff94045844b97a8ac8e23f4d24d832e66b1", + "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "0xe92aea50660f7ba4a027ccaf0aadd3babf24c9e2dda45e35dab3278e30ea523c" + ], + "returns": {}, + "timestamp": 1692129323, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/8453/run-1692129331.json b/broadcast/DeployKernel.s.sol/8453/run-1692129331.json new file mode 100644 index 00000000..bfefb6b7 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/8453/run-1692129331.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0xb8a25d22b4fcd96aa1aeaffa492edff94045844b97a8ac8e23f4d24d832e66b1", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe92aea50660f7ba4a027ccaf0aadd3babf24c9e2dda45e35dab3278e30ea523c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xb8a25d22b4fcd96aa1aeaffa492edff94045844b97a8ac8e23f4d24d832e66b1", + "transactionIndex": "0x1", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b4962", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e35" + }, + { + "transactionHash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionIndex": "0x2", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x25a1bd", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "transactionHash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e35" + }, + { + "transactionHash": "0xe92aea50660f7ba4a027ccaf0aadd3babf24c9e2dda45e35dab3278e30ea523c", + "transactionIndex": "0x3", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x26571f", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e35" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129331, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/8453/run-latest.json b/broadcast/DeployKernel.s.sol/8453/run-latest.json new file mode 100644 index 00000000..bfefb6b7 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/8453/run-latest.json @@ -0,0 +1,140 @@ +{ + "transactions": [ + { + "hash": "0xb8a25d22b4fcd96aa1aeaffa492edff94045844b97a8ac8e23f4d24d832e66b1", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe92aea50660f7ba4a027ccaf0aadd3babf24c9e2dda45e35dab3278e30ea523c", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xb8a25d22b4fcd96aa1aeaffa492edff94045844b97a8ac8e23f4d24d832e66b1", + "transactionIndex": "0x1", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b4962", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e35" + }, + { + "transactionHash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionIndex": "0x2", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x25a1bd", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "transactionHash": "0xb38f2c085f33408fb2100cf064f1d206a26e385cc9c4cc2e23e90173412e73a0", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e35" + }, + { + "transactionHash": "0xe92aea50660f7ba4a027ccaf0aadd3babf24c9e2dda45e35dab3278e30ea523c", + "transactionIndex": "0x3", + "blockHash": "0x00265039832576befa7631b00458358c0cb3e3f251b93db617105a744b384ee2", + "blockNumber": "0x28bda6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x26571f", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e35" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129331, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84531/run-1691520712.json b/broadcast/DeployKernel.s.sol/84531/run-1691520712.json new file mode 100644 index 00000000..cccc7863 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84531/run-1691520712.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x3ca84beee0a444f08e0e0a1cb9fed60dfc514af1ba8ab82f6c41777a6361f4f9", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb1b6d3969f04ab00f884a73d3cea14e01277cc18e88f5a6c38ac775854e5e37e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x494b0856d6779e1058bfde9f29e19c636daf59c858e93f2041bf337904213c31", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x79e651fa5778767957385ecef3ca5500ef6a19a5154eeb84e5a1daa8edc076cd", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x3ca84beee0a444f08e0e0a1cb9fed60dfc514af1ba8ab82f6c41777a6361f4f9", + "0xb1b6d3969f04ab00f884a73d3cea14e01277cc18e88f5a6c38ac775854e5e37e", + "0x494b0856d6779e1058bfde9f29e19c636daf59c858e93f2041bf337904213c31", + "0x79e651fa5778767957385ecef3ca5500ef6a19a5154eeb84e5a1daa8edc076cd" + ], + "returns": {}, + "timestamp": 1691520712, + "chain": 84531, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84531/run-1691520719.json b/broadcast/DeployKernel.s.sol/84531/run-1691520719.json new file mode 100644 index 00000000..fefb29af --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84531/run-1691520719.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x3ca84beee0a444f08e0e0a1cb9fed60dfc514af1ba8ab82f6c41777a6361f4f9", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x26dfd0", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001ff138819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611e059283620001ec8439608051836118f9015260a0518361191c015260c0518361198e015260e051836119b4015251826118d801525181818161049c0152818161065e015281816108b701528181610a4201528181610b6d01528181610d6701528181610e8801528181610f89015281816110b301526113030152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661109657005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57611004565b610f72565b610ed4565b610e55565b610dc6565b610d51565b610d1c565b610c74565b610c3d565b610b57565b610aff565b6109fb565b610932565b61086e565b610744565b61063a565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611de58339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ea565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b61046d61041a565b9360a4356001600160401b0381116101755761048d903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610630575b61061e5784926104fa610591926104eb6104dd6101ff565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105218761105e565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105bb6000998a94600484016115fb565b038183895af1801561061957610600575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060d61061392610190565b8061016a565b386105cc565b6112e3565b604051637046c88d60e01b8152600490fd5b50303314156104c5565b602036600319011261017557600435610652816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106d6575b61061e57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b5030331415610687565b9291926001600160401b0382116101a35760405191610709601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610741933591016106e0565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077b61020e565b9061078784840161030b565b8252602484013560208301526044840135818111610175576107ae90843691870101610726565b60408301526064840135818111610175576107ce90843691870101610726565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e08301526101048401356101008301526101248401358181116101755761082390843691870101610726565b610120830152610144840135908111610175576102c09361085e9361084b9236920101610726565b61014082015260443590602435906112ef565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c091600091610904575b506040519081529081906020820190565b610925915060203d811161092b575b61091d81836101de565b810190611204565b386108f3565b503d610913565b34610175576020366003190112610175576102c06109776109516103ee565b60006060604051610961816101a8565b828152826020820152826040820152015261105e565b60405190610984826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a13816102fa565b6044356001600160401b03811161017557610a32903690600401610726565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac9575b61061e5780610a8260019261110f565b03610aa85760008281939260208394519201905af43d82803e15610aa4573d90f35b3d90fd5b6000828193926020839451920190602435905af13d82803e15610aa4573d90f35b50610ad9610ad5611bad565b1590565b610a72565b60405190610aeb826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ade565b90604060031983011261017557600435610b34816102fa565b91602435906001600160401b03821161017557610b5391600401610316565b9091565b610b6036610b1b565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c33575b61061e5780600080516020611de58339815191525460501c1691610bb981611d31565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c2f578385610c0d819593829463064acaab60e11b8452600484016115fb565b03925af1801561061957610c1f575080f35b8061060d610c2c92610190565b80f35b8380fd5b5030331415610b96565b34610175576000366003190112610175576020600080516020611de58339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cca610c9061022e565b610c98610ade565b90604051928392600f60f81b8452610cbc60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d0557505050500390f35b835185528695509381019392810192600101610cf6565b34610175576000366003190112610175576020600080516020611de58339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610de26004356102fa565b610ded6024356102fa565b6001600160401b0360443581811161017557610e0d903690600401610d96565b505060643581811161017557610e27903690600401610d96565b505060843590811161017557610e41903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610619576102c09160009161090457506040519081529081906020820190565b610edd36610b1b565b600080516020611de583398151915254919290916001600160a01b03919060501c8216610f6157610f0d81611d31565b1691823b1561017557610f42926000928360405180968195829463064acaab60e11b8452602060048501526024840191611597565b03925af1801561061957610f5257005b8061060d610f5f92610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f866103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ffa575b61061e57600080516020611de583398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fb9565b346101755760a0366003190112610175576110206004356102fa565b61102b6024356102fa565b6084356001600160401b0381116101755761104a903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006110ac81356001600160e01b03191661105e565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611100575b61061e57818091368280378136915af43d82803e15610aa4573d90f35b50611109611bad565b156110e3565b6002111561111957565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111f557505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112d9906020810151608084015283810151611258610160918260a08701526101c0860190610250565b906112c6611278606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611537576004908135978861014481013501928060248501940135600080516020611de5833981519152549461136561135f838361112f565b906111d8565b9b6001600160e01b0319808e16908161141a57505050899a9b50611394826020999a9b9594936113ab9361113d565b9660501c965b858c8061140b575b505036916106e0565b6101408501526113cf604051998a9788968794633a871cdd60e01b86528501611213565b0393165af19182156106195761074193926113eb575b50611d7e565b61140491925060203d811161092b5761091d81836101de565b90386113e5565b81808092335af150858c6113a2565b9199509197969594939c8660e01b161615156000146114445760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114e3575061148561148061135f8b606460209c9d013501602486820135910161112f565b61105e565b60018101549099906001600160a01b031696848816156114d8575b50816113ab926114af9261113d565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961139a565b60501c9650816114a0565b9198979095509250600160e11b036115295761151f6113ab948a9361151a61135f8a606460209c01350160248d820135910161112f565b61160c565b919992969161139a565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061156b57505050565b60140360031b82901b16169150565b359060208110611588575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610741949281528160208201520191611597565b6001600160d01b031990358181169392600681106115ec57505050565b60060360031b82901b16169150565b916020610741938181520191611597565b9061163861162c611626611620868561115a565b90611549565b60601c90565b6001600160a01b031690565b9361164c611646858461116b565b9061157a565b60588301607882019461166761164687856058018a896111c0565b96611770611678611646838961117c565b611688611626611620858b61118d565b996117166116973689896106e0565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170e60c0826101de565b5190206118d6565b600080516020611de583398151915254909190611752906117429060501c6001600160a01b031661162c565b9189019b60788d0190878d6111c0565b60405163199ed7c960e11b81529586948593849391600485016115b8565b03915afa928315610619576114806117b661186595610521946000916118b9575b506117af61179f878d61117c565b6001600160a01b0319929161157a565b1690611d7e565b9a898b016078019a85036077190199611855906118456117e86117e26117dc8a8561119e565b906115cf565b60d01c90565b9761181c61162c6116266116206118056117e26117dc878a6111af565b94611816611626611620838b61118d565b9761115a565b946118366118286101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189b926000928360405180968195829463064acaab60e11b8452600484016115fb565b03925af18015610619576118ac5750565b8061060d61020c92610190565b6118d091508d803d1061092b5761091d81836101de565b38611791565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611963575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611944565b600080516020611de583398151915254611a3793602093909291611a199060501c6001600160a01b031661162c565b916040519586948593849363199ed7c960e11b8552600485016115b8565b03915afa801561061957611a5391600091611ac1575b50611adf565b60208101514265ffffffffffff90911611611ab45742611a8a611a7f604084015165ffffffffffff1690565b65ffffffffffff1690565b10611ab457516001600160a01b0316611aa857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b611ad9915060203d811161092b5761091d81836101de565b38611a4d565b604080516001600160401b03929060608101848111828210176101a35760009184918252828152826020820152015265ffffffffffff90818160a01c16908115611b54575b83519460608601908111868210176101a35784526001600160a01b038116855260d01c6020850152169082015290565b829150611b24565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611de583398151915254611bd29060501c6001600160a01b031661162c565b6040519081639ea9bd5960e01b9182825260209384918180611bf8363360048401611b74565b03915afa90811561061957600091611d14575b50611d0d57611c256000356001600160e01b03191661105e565b6001810154909190611c3f906001600160a01b031661162c565b916001600160a01b03831615908115611cd4575b8115611cbf575b5015611c6857505050600090565b829060405192839182528180611c82363360048401611b74565b03915afa91821561061957600092611c9957505090565b6107419250803d10611cb8575b611cb081836101de565b810190611b5c565b503d611ca6565b544265ffffffffffff90911611905038611c5a565b905065ffffffffffff611cf1825465ffffffffffff9060301c1690565b168015159081611d03575b5090611c53565b9050421138611cfc565b5050600190565b611d2b9150833d8511611cb857611cb081836101de565b38611c0b565b600080516020611de583398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611d99575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611ddc575b5081811190821802181790565b925038611dcf56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x5", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb1b6d3969f04ab00f884a73d3cea14e01277cc18e88f5a6c38ac775854e5e37e", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xe0068", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610aee38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a2090816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107915781632569296214610746578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610806565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610806565b9061014b61084f565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610806565b906101b861084f565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a610899565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361084f565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d1906109d4565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761084f565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610806565b90602435918215158093036103975761037661084f565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461084f565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610806565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261084f565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a6020923561086c565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610821565b6105948580518381948a830196873781016024358a82015203888101845201826109fe565b5190201661086c565b8391506060366003190112610128576105b4610806565b9260243567ffffffffffffffff8111610397576105d49036908401610821565b94909360018060a01b039384831682526020966001885260ff8584205416156106f1576bffffffffffffffffffffffff855189810190838a833761062c88828d8782019060443590820152038d8101845201826109fe565b51902016903315600117156106e557610643610899565b9160896013840186f59788156106d957918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106bf57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a35191168152f35b3d156106ce57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b82632f6348368552601cfd5b845162461bcd60e51b8152808301899052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126108025782823563ffffffff8116809103610128576107b961084f565b81546001600160a01b031693843b156108025760249084519586938492621cb65b60e51b845283015234905af19081156102db57506107f6575080f35b6107ff906109d4565b80f35b8280fd5b600435906001600160a01b038216820361081c57565b600080fd5b9181601f8401121561081c5782359167ffffffffffffffff831161081c576020838186019501011161081c57565b638b78c6d81954330361085e57565b6382b429006000526004601cfd5b60896013610878610899565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561093d57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff81116109e857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109e857604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x494b0856d6779e1058bfde9f29e19c636daf59c858e93f2041bf337904213c31", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xD2063bE7C610eb55492C05385743edDbf5b6B951", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000d2063be7c610eb55492c05385743eddbf5b6b9510000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x79e651fa5778767957385ecef3ca5500ef6a19a5154eeb84e5a1daa8edc076cd", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x85df6dc686fbdcac7da61651d116fc71b2246b50", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x3ca84beee0a444f08e0e0a1cb9fed60dfc514af1ba8ab82f6c41777a6361f4f9", + "transactionIndex": "0x1", + "blockHash": "0xf505c2a8f7175ffdeb05c56cf9fa3ba0c5d5879ca036391279a3b6e21be32fd5", + "blockNumber": "0x7c90de", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b4bd2", + "gasUsed": "0x1a94a9", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0xb1b6d3969f04ab00f884a73d3cea14e01277cc18e88f5a6c38ac775854e5e37e", + "transactionIndex": "0x2", + "blockHash": "0xf505c2a8f7175ffdeb05c56cf9fa3ba0c5d5879ca036391279a3b6e21be32fd5", + "blockNumber": "0x7c90de", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x256edf", + "gasUsed": "0xa230d", + "contractAddress": null, + "logs": [ + { + "address": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xf505c2a8f7175ffdeb05c56cf9fa3ba0c5d5879ca036391279a3b6e21be32fd5", + "blockNumber": "0x7c90de", + "transactionHash": "0xb1b6d3969f04ab00f884a73d3cea14e01277cc18e88f5a6c38ac775854e5e37e", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000200000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x494b0856d6779e1058bfde9f29e19c636daf59c858e93f2041bf337904213c31", + "transactionIndex": "0x3", + "blockHash": "0xf505c2a8f7175ffdeb05c56cf9fa3ba0c5d5879ca036391279a3b6e21be32fd5", + "blockNumber": "0x7c90de", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x262441", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x79e651fa5778767957385ecef3ca5500ef6a19a5154eeb84e5a1daa8edc076cd", + "transactionIndex": "0x4", + "blockHash": "0xf505c2a8f7175ffdeb05c56cf9fa3ba0c5d5879ca036391279a3b6e21be32fd5", + "blockNumber": "0x7c90de", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50", + "cumulativeGasUsed": "0x2768aa", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x00000000000000000000000085df6dc686fbdcac7da61651d116fc71b2246b50" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xf505c2a8f7175ffdeb05c56cf9fa3ba0c5d5879ca036391279a3b6e21be32fd5", + "blockNumber": "0x7c90de", + "transactionHash": "0x79e651fa5778767957385ecef3ca5500ef6a19a5154eeb84e5a1daa8edc076cd", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520719, + "chain": 84531, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84531/run-1692073995.json b/broadcast/DeployKernel.s.sol/84531/run-1692073995.json new file mode 100644 index 00000000..6a332470 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84531/run-1692073995.json @@ -0,0 +1,97 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073995, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84531/run-1692074111.json b/broadcast/DeployKernel.s.sol/84531/run-1692074111.json new file mode 100644 index 00000000..f2b2dcbe --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84531/run-1692074111.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x621c9a10560ae46f80eb4162ce1d6d7b5999cd2834a2c042ecd90c00a710ea9d", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4d4250c8424c25122dfb19922a456aae922da996906aa64e2efb89b1bde0a6a6", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x621c9a10560ae46f80eb4162ce1d6d7b5999cd2834a2c042ecd90c00a710ea9d", + "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "0x4d4250c8424c25122dfb19922a456aae922da996906aa64e2efb89b1bde0a6a6", + "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223" + ], + "returns": {}, + "timestamp": 1692074111, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84531/run-1692074119.json b/broadcast/DeployKernel.s.sol/84531/run-1692074119.json new file mode 100644 index 00000000..1324cbb9 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84531/run-1692074119.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x621c9a10560ae46f80eb4162ce1d6d7b5999cd2834a2c042ecd90c00a710ea9d", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4d4250c8424c25122dfb19922a456aae922da996906aa64e2efb89b1bde0a6a6", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x621c9a10560ae46f80eb4162ce1d6d7b5999cd2834a2c042ecd90c00a710ea9d", + "transactionIndex": "0x1", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b145e", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionIndex": "0x2", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x256cb9", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "transactionHash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x4d4250c8424c25122dfb19922a456aae922da996906aa64e2efb89b1bde0a6a6", + "transactionIndex": "0x3", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x26221b", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionIndex": "0x4", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x276684", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "transactionHash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074119, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/84531/run-latest.json b/broadcast/DeployKernel.s.sol/84531/run-latest.json new file mode 100644 index 00000000..1324cbb9 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/84531/run-latest.json @@ -0,0 +1,193 @@ +{ + "transactions": [ + { + "hash": "0x621c9a10560ae46f80eb4162ce1d6d7b5999cd2834a2c042ecd90c00a710ea9d", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24572d", + "value": "0x0", + "data": "0x000000000000000000000000000000000000000000000000000000000000000061014034620001b057601f62001f9f38819003918201601f19168301916001600160401b03831184841017620001b557808492602094604052833981010312620001b057516001600160a01b0381168103620001b057306080524660a05260a062000069620001cb565b600681526005602082016512d95c9b995b60d21b815260206200008b620001cb565b838152019264302e322e3160d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611db39283620001ec8439608051836118fc015260a0518361191f015260c05183611991015260e051836119b7015251826118db01525181818161049d01528181610654015281816108ad01528181610a3801528181610b5f01528181610d5901528181610e7a01528181610f7b015281816110a501526112f50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001b55760405256fe60806040526004361015610015575b3661108857005b60003560e01c806306fdde03146101655780630b3dc35414610160578063150b7a021461015b5780631626ba7e1461015657806329f8b174146101515780633659cfe61461014c5780633a871cdd146101475780633e1b08121461014257806351166ba01461013d578063519454471461013857806354fd4d501461013357806355b14f501461012e57806357b750471461012957806384b0196e1461012457806388e7fd061461011f578063b0d691fe1461011a578063bc197c8114610115578063d087d28814610110578063d1f578941461010b578063d5416221146101065763f23a6e610361000e57610ff6565b610f64565b610ec6565b610e47565b610db8565b610d43565b610d0e565b610c66565b610c2f565b610b49565b610af1565b6109f1565b610928565b610864565b61073a565b610630565b61042f565b61039d565b610343565b6102c4565b610290565b600091031261017557565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101a357604052565b61017a565b608081019081106001600160401b038211176101a357604052565b604081019081106001600160401b038211176101a357604052565b90601f801991011681019081106001600160401b038211176101a357604052565b6040519061020c826101a8565b565b6040519061016082018281106001600160401b038211176101a357604052565b6040519061023b826101c3565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061027c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161025b565b34610175576000366003190112610175576102c06102ac61022e565b604051918291602083526020830190610250565b0390f35b34610175576000366003190112610175576020600080516020611d938339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361017557565b359061020c826102fa565b9181601f84011215610175578235916001600160401b038311610175576020838186019501011161017557565b346101755760803660031901126101755761035f6004356102fa565b61036a6024356102fa565b6064356001600160401b03811161017557610389903690600401610316565b5050604051630a85bd0160e11b8152602090f35b34610175576040366003190112610175576024356001600160401b038111610175576103db6103d26020923690600401610316565b906004356119ed565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361017557565b6064359065ffffffffffff8216820361017557565b6084359065ffffffffffff8216820361017557565b60c0366003190112610175576104436103ee565b60243590610450826102fa565b6044359061045d826102fa565b610465610405565b9261046e61041a565b9060a4356001600160401b0381116101755761048e903690600401610316565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610626575b6106145784926104f0610587926104db6101ff565b65ffffffffffff918216815292166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261051787611050565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b1693843b15610175576040519063064acaab60e11b825281806105b16000998a94600484016115ed565b038183895af1801561060f576105f6575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060361060992610190565b8061016a565b386105c2565b6112d5565b604051637046c88d60e01b8152600490fd5b50303314156104c6565b602036600319011261017557600435610648816102fa565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806106cc575b61061457807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561067d565b9291926001600160401b0382116101a357604051916106ff601f8201601f1916602001846101de565b829481845281830111610175578281602093846000960137010152565b9080601f8301121561017557816020610737933591016106d6565b90565b6003196060368201126101755760048035916001600160401b0390818411610175576101609084360301126101755761077161020e565b9061077d84840161030b565b8252602484013560208301526044840135818111610175576107a49084369187010161071c565b60408301526064840135818111610175576107c49084369187010161071c565b60608301526084840135608083015260a484013560a083015260c484013560c083015260e484013560e0830152610104840135610100830152610124840135818111610175576108199084369187010161071c565b610120830152610144840135908111610175576102c09361085493610841923692010161071c565b61014082015260443590602435906112e1565b6040519081529081906020820190565b34610175576020366003190112610175576004356001600160c01b0381169081900361017557604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa575b506040519081529081906020820190565b61091b915060203d8111610921575b61091381836101de565b8101906111f6565b386108e9565b503d610909565b34610175576020366003190112610175576102c061096d6109476103ee565b60006060604051610957816101a8565b8281528260208201528260408201520152611050565b6040519061097a826101a8565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261017557600435610a09816102fa565b6044356001600160401b03811161017557610a2890369060040161071c565b90606435600281101561017557337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610abb575b61061457610a7581611101565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b60008281939260208394519201905af43d82803e15610a9a573d90f35b50610acb610ac7611b20565b1590565b610a68565b60405190610add826101c3565b6005825264302e322e3160d81b6020830152565b34610175576000366003190112610175576102c06102ac610ad0565b90604060031983011261017557600435610b26816102fa565b91602435906001600160401b03821161017557610b4591600401610316565b9091565b610b5236610b0d565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c25575b6106145780600080516020611d938339815191525460501c1691610bab81611cb6565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c21578385610bff819593829463064acaab60e11b8452600484016115ed565b03925af1801561060f57610c11575080f35b80610603610c1e92610190565b80f35b8380fd5b5030331415610b88565b34610175576000366003190112610175576020600080516020611d938339815191525460e01b6040519063ffffffff60e01b168152f35b3461017557600036600319011261017557610cbc610c8261022e565b610c8a610ad0565b90604051928392600f60f81b8452610cae60209360e08587015260e0860190610250565b908482036040860152610250565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf757505050500390f35b835185528695509381019392810192600101610ce8565b34610175576000366003190112610175576020600080516020611d938339815191525465ffffffffffff60405191831c168152f35b34610175576000366003190112610175576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610175578235916001600160401b038311610175576020808501948460051b01011161017557565b346101755760a036600319011261017557610dd46004356102fa565b610ddf6024356102fa565b6001600160401b0360443581811161017557610dff903690600401610d88565b505060643581811161017557610e19903690600401610d88565b505060843590811161017557610e33903690600401610316565b505060405163bc197c8160e01b8152602090f35b3461017557600036600319011261017557604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060f576102c0916000916108fa57506040519081529081906020820190565b610ecf36610b0d565b600080516020611d9383398151915254919290916001600160a01b03919060501c8216610f5357610eff81611cb6565b1691823b1561017557610f34926000928360405180968195829463064acaab60e11b8452602060048501526024840191611589565b03925af1801561060f57610f4457005b80610603610f5192610190565b005b60405162dc149f60e41b8152600490fd5b602036600319011261017557610f786103ee565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fec575b61061457600080516020611d9383398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fab565b346101755760a0366003190112610175576110126004356102fa565b61101d6024356102fa565b6084356001600160401b0381116101755761103c903690600401610316565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109e81356001600160e01b031916611050565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110f2575b61061457818091368280378136915af43d82803e15610a9a573d90f35b506110fb611b20565b156110d5565b6002111561110b57565b634e487b7160e01b600052602160045260246000fd5b906004116101755790600490565b909291928360041161017557831161017557600401916003190190565b906024116101755760100190601490565b906058116101755760380190602090565b906024116101755760040190602090565b906038116101755760240190601490565b90600a116101755760040190600690565b9060101161017557600a0190600690565b90939293848311610175578411610175578101920390565b6001600160e01b031990358181169392600481106111e757505050565b60040360031b82901b16169150565b90816020910312610175575190565b606080825282516001600160a01b031690820152919392916040916112cb90602081015160808401528381015161124a610160918260a08701526101c0860190610250565b906112b861126a606085015193605f1994858983030160c08a0152610250565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610250565b92015190848303016101a0850152610250565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b03939260009290918391907f000000000000000000000000000000000000000000000000000000000000000087163303611529576004908135978861014481013501928060248501940135600080516020611d9383398151915254946113576113518383611121565b906111ca565b9b6001600160e01b0319808e16908161140c57505050899a9b50611386826020999a9b95949361139d9361112f565b9660501c965b858c806113fd575b505036916106d6565b6101408501526113c1604051998a9788968794633a871cdd60e01b86528501611205565b0393165af191821561060f5761073793926113dd575b50611d2c565b6113f691925060203d81116109215761091381836101de565b90386113d7565b81808092335af150858c611394565b9199509197969594939c8660e01b161615156000146114365760405163fc2f51c560e01b81528c90fd5b90899a9b91600160e09b95969798999a9b1b81146000146114d557506114776114726113518b606460209c9d0135016024868201359101611121565b611050565b60018101549099906001600160a01b031696848816156114ca575b508161139d926114a19261112f565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b16179961138c565b60501c965081611492565b9198979095509250600160e11b0361151b5761151161139d948a9361150c6113518a606460209c01350160248d8201359101611121565b6115fe565b919992969161138c565b505050505050505050600190565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061155d57505050565b60140360031b82901b16169150565b35906020811061157a575090565b6000199060200360031b1b1690565b908060209392818452848401376000828201840152601f01601f1916010190565b604090610737949281528160208201520191611589565b6001600160d01b031990358181169392600681106115de57505050565b60060360031b82901b16169150565b916020610737938181520191611589565b9061162a61161e611618611612868561114c565b9061153b565b60601c90565b6001600160a01b031690565b9361163e611638858461115d565b9061156c565b60588301607882019461165961163887856058018a896111b2565b9661176261166a611638838961116e565b61167a611618611612858b61117f565b996117086116893689896106d6565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768185019081526001600160e01b03198b169282019290925260608101969096526001600160a01b039e909e16608086015260a08086019190915284529b8c9361170060c0826101de565b5190206118d9565b600080516020611d9383398151915254909190611744906117349060501c6001600160a01b031661161e565b9189019b60788d0190878d6111b2565b60405163199ed7c960e11b81529586948593849391600485016115aa565b03915afa92831561060f576114726117a861186895610517946000916118bc575b506117a1611791878d61116e565b6001600160a01b0319929161156c565b1690611d2c565b9a898b016078019a85036077190199611858906118486117e86117dd6117d76117d18b86611190565b906115c1565b60d01c90565b65ffffffffffff1690565b9761181f61161e6116186116126118086117dd6117d76117d1888b6111a1565b94611819611618611612838b61117f565b9761114c565b9461183961182b6101ff565b65ffffffffffff909b168b52565b89019065ffffffffffff169052565b6001600160a01b03166040870152565b6001600160a01b03166060850152565b6001600160a01b03871691823b156101755761189e926000928360405180968195829463064acaab60e11b8452600484016115ed565b03925af1801561060f576118af5750565b8061060361020c92610190565b6118d391508d803d106109215761091381836101de565b38611783565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611966575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611947565b600080516020611d9383398151915254611a3a93602093909291611a1c9060501c6001600160a01b031661161e565b916040519586948593849363199ed7c960e11b8552600485016115aa565b03915afa801561060f57611a5691600091611ab1575b50611d03565b9165ffffffffffff908142911611611aa15742911610611a94576001600160a01b0316611a8857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b611ac9915060203d81116109215761091381836101de565b38611a50565b90816020910312610175575180151581036101755790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b600080516020611d9383398151915254611b459060501c6001600160a01b031661161e565b6040519081639ea9bd5960e01b9182825260209384918180611b6b363360048401611ae7565b03915afa90811561060f57600091611c99575b50611c9257611b986000356001600160e01b031916611050565b6001810154909190611bb2906001600160a01b031661161e565b916001600160a01b03831615908115611c56575b8115611c32575b5015611bdb57505050600090565b829060405192839182528180611bf5363360048401611ae7565b03915afa91821561060f57600092611c0c57505090565b6107379250803d10611c2b575b611c2381836101de565b810190611acf565b503d611c19565b54611c45915065ffffffffffff166117dd565b65ffffffffffff4291161138611bcd565b905065ffffffffffff611c766117dd835465ffffffffffff9060301c1690565b168015159081611c88575b5090611bc6565b9050421138611c81565b5050600190565b611cb09150833d8511611c2b57611c2381836101de565b38611b7e565b600080516020611d9383398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c16928315600114611d24575b5060d01c92565b925038611d1d565b8082186001600160a01b031615600114611d47575050600190565b65ffffffffffff60a01b828116828216818118918111919091028082189465ffffffffffff60a01b199485169416929114611d8a575b5081811190821802181790565b925038611d7d56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf2137", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4d4250c8424c25122dfb19922a456aae922da996906aa64e2efb89b1bde0a6a6", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "setImplementation(address,bool)", + "arguments": [ + "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x10945", + "value": "0x0", + "data": "0xbb30a974000000000000000000000000f048ad83cb2dfd6037a43902a2a5be04e53cd2eb0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionType": "CALL", + "contractName": "KernelFactory", + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": "addStake(uint32)", + "arguments": [ + "1" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da73", + "value": "0x1", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x621c9a10560ae46f80eb4162ce1d6d7b5999cd2834a2c042ecd90c00a710ea9d", + "transactionIndex": "0x1", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1b145e", + "gasUsed": "0x1a4f55", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionIndex": "0x2", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x256cb9", + "gasUsed": "0xa585b", + "contractAddress": null, + "logs": [ + { + "address": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "transactionHash": "0x8b48729a09052747d35d95daa1ef3c48b22099cca0513ced7020da1b879bd4ad", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000020000000000000000000800000000000000000000000000000000400000000000000000000000000080000000000000000000000000080000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x4d4250c8424c25122dfb19922a456aae922da996906aa64e2efb89b1bde0a6a6", + "transactionIndex": "0x3", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x26221b", + "gasUsed": "0xb562", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + }, + { + "transactionHash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionIndex": "0x4", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x276684", + "gasUsed": "0x14469", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xe2f79cec09ad5e891c6bc166d9293896afce3e3e69307874478f95b13d25c424", + "blockNumber": "0x80c9b9", + "transactionHash": "0x669c62c539087c89672b9b250cda1ce2398d5bc82031c6f6831ac25f3d113223", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074119, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/1/run-1692154988.json b/broadcast/DeploySessionKey.s.sol/1/run-1692154988.json new file mode 100644 index 00000000..7ab417a1 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/1/run-1692154988.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x4f1452697b40c91261a6ddb1eea2ecff90331d3666e0cc2daec0b9b5dc6391ae", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x10", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x4f1452697b40c91261a6ddb1eea2ecff90331d3666e0cc2daec0b9b5dc6391ae" + ], + "returns": {}, + "timestamp": 1692154988, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/1/run-1692154995.json b/broadcast/DeploySessionKey.s.sol/1/run-1692154995.json new file mode 100644 index 00000000..cde10cbf --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/1/run-1692154995.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x4f1452697b40c91261a6ddb1eea2ecff90331d3666e0cc2daec0b9b5dc6391ae", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x10", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x4f1452697b40c91261a6ddb1eea2ecff90331d3666e0cc2daec0b9b5dc6391ae", + "transactionIndex": "0x23", + "blockHash": "0x9483d75acaf6d54cd89c751d4cc60e025296ebeccf5e30a0a5ab7d0786ba499c", + "blockNumber": "0x11181ea", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x461f7a", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x646adeae8" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692154995, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/1/run-latest.json b/broadcast/DeploySessionKey.s.sol/1/run-latest.json new file mode 100644 index 00000000..cde10cbf --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/1/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x4f1452697b40c91261a6ddb1eea2ecff90331d3666e0cc2daec0b9b5dc6391ae", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x10", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x4f1452697b40c91261a6ddb1eea2ecff90331d3666e0cc2daec0b9b5dc6391ae", + "transactionIndex": "0x23", + "blockHash": "0x9483d75acaf6d54cd89c751d4cc60e025296ebeccf5e30a0a5ab7d0786ba499c", + "blockNumber": "0x11181ea", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x461f7a", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x646adeae8" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692154995, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10/run-1692128944.json b/broadcast/DeploySessionKey.s.sol/10/run-1692128944.json new file mode 100644 index 00000000..3fe2b241 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10/run-1692128944.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x807e7a9b05a6bd52054136d0e0d02cc21bb9fdbfc97f8781fd0a6ac0ab7eff3d", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x807e7a9b05a6bd52054136d0e0d02cc21bb9fdbfc97f8781fd0a6ac0ab7eff3d" + ], + "returns": {}, + "timestamp": 1692128944, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10/run-1692128951.json b/broadcast/DeploySessionKey.s.sol/10/run-1692128951.json new file mode 100644 index 00000000..a6710c16 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10/run-1692128951.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x807e7a9b05a6bd52054136d0e0d02cc21bb9fdbfc97f8781fd0a6ac0ab7eff3d", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x807e7a9b05a6bd52054136d0e0d02cc21bb9fdbfc97f8781fd0a6ac0ab7eff3d", + "transactionIndex": "0x1", + "blockHash": "0x74c19fc6cd861cf29a7e83013b83a590dc9a9e09e9f2cd256cac47481e855201", + "blockNumber": "0x673fe7d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf2aec", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb8f08622" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128951, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10/run-latest.json b/broadcast/DeploySessionKey.s.sol/10/run-latest.json new file mode 100644 index 00000000..a6710c16 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x807e7a9b05a6bd52054136d0e0d02cc21bb9fdbfc97f8781fd0a6ac0ab7eff3d", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x807e7a9b05a6bd52054136d0e0d02cc21bb9fdbfc97f8781fd0a6ac0ab7eff3d", + "transactionIndex": "0x1", + "blockHash": "0x74c19fc6cd861cf29a7e83013b83a590dc9a9e09e9f2cd256cac47481e855201", + "blockNumber": "0x673fe7d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf2aec", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb8f08622" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128951, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/100/run-1692129514.json b/broadcast/DeploySessionKey.s.sol/100/run-1692129514.json new file mode 100644 index 00000000..d0869229 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/100/run-1692129514.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xa6e7e74b1155d585cdcfb0c451ca4e628fca0583a2d55d5c03e92b34b18e9009", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xa6e7e74b1155d585cdcfb0c451ca4e628fca0583a2d55d5c03e92b34b18e9009" + ], + "returns": {}, + "timestamp": 1692129514, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/100/run-1692129521.json b/broadcast/DeploySessionKey.s.sol/100/run-1692129521.json new file mode 100644 index 00000000..af665d14 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/100/run-1692129521.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xa6e7e74b1155d585cdcfb0c451ca4e628fca0583a2d55d5c03e92b34b18e9009", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa6e7e74b1155d585cdcfb0c451ca4e628fca0583a2d55d5c03e92b34b18e9009", + "transactionIndex": "0x0", + "blockHash": "0xd393a7b2e81eff5fc79d598d37ffde784a47a2bb82110f8de1d7b5d463c90f42", + "blockNumber": "0x1c1cb9b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe74af", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129521, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/100/run-latest.json b/broadcast/DeploySessionKey.s.sol/100/run-latest.json new file mode 100644 index 00000000..af665d14 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/100/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xa6e7e74b1155d585cdcfb0c451ca4e628fca0583a2d55d5c03e92b34b18e9009", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa6e7e74b1155d585cdcfb0c451ca4e628fca0583a2d55d5c03e92b34b18e9009", + "transactionIndex": "0x0", + "blockHash": "0xd393a7b2e81eff5fc79d598d37ffde784a47a2bb82110f8de1d7b5d463c90f42", + "blockNumber": "0x1c1cb9b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe74af", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129521, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10200/run-1691520839.json b/broadcast/DeploySessionKey.s.sol/10200/run-1691520839.json new file mode 100644 index 00000000..2e8a2da1 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10200/run-1691520839.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x436f650b7e6411510489f5d199eeb7196258c54979045be4b5b2a94962f7e9c4", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x436f650b7e6411510489f5d199eeb7196258c54979045be4b5b2a94962f7e9c4" + ], + "returns": {}, + "timestamp": 1691520839, + "chain": 10200, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10200/run-1691520846.json b/broadcast/DeploySessionKey.s.sol/10200/run-1691520846.json new file mode 100644 index 00000000..26a446b9 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10200/run-1691520846.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x436f650b7e6411510489f5d199eeb7196258c54979045be4b5b2a94962f7e9c4", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x436f650b7e6411510489f5d199eeb7196258c54979045be4b5b2a94962f7e9c4", + "transactionIndex": "0x2", + "blockHash": "0xff82e1859f7f22ec177d30db47ce99bc7c846bc18a7ed5de3f6f93ea9f4bca3f", + "blockNumber": "0x52714d", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf51d0", + "gasUsed": "0xe7aa0", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520846, + "chain": 10200, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10200/run-1692074391.json b/broadcast/DeploySessionKey.s.sol/10200/run-1692074391.json new file mode 100644 index 00000000..53236866 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10200/run-1692074391.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x8668a335a3cd6002787202d06a38801146adfe5b6e8f79024b90050e6337f0b8", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x8668a335a3cd6002787202d06a38801146adfe5b6e8f79024b90050e6337f0b8" + ], + "returns": {}, + "timestamp": 1692074391, + "chain": 10200, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10200/run-1692074398.json b/broadcast/DeploySessionKey.s.sol/10200/run-1692074398.json new file mode 100644 index 00000000..ebc52613 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10200/run-1692074398.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x8668a335a3cd6002787202d06a38801146adfe5b6e8f79024b90050e6337f0b8", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8668a335a3cd6002787202d06a38801146adfe5b6e8f79024b90050e6337f0b8", + "transactionIndex": "0x1", + "blockHash": "0x340684b7121eeabe4e206761713c25c6c0bdf208d58b7141d98cb897a4a45ce2", + "blockNumber": "0x542129", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xedc8f", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074398, + "chain": 10200, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/10200/run-latest.json b/broadcast/DeploySessionKey.s.sol/10200/run-latest.json new file mode 100644 index 00000000..ebc52613 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/10200/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x8668a335a3cd6002787202d06a38801146adfe5b6e8f79024b90050e6337f0b8", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8668a335a3cd6002787202d06a38801146adfe5b6e8f79024b90050e6337f0b8", + "transactionIndex": "0x1", + "blockHash": "0x340684b7121eeabe4e206761713c25c6c0bdf208d58b7141d98cb897a4a45ce2", + "blockNumber": "0x542129", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xedc8f", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e07" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074398, + "chain": 10200, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/137/run-1692128336.json b/broadcast/DeploySessionKey.s.sol/137/run-1692128336.json new file mode 100644 index 00000000..c9e3faaa --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/137/run-1692128336.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x20" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420" + ], + "returns": {}, + "timestamp": 1692128336, + "chain": 137, + "multi": false, + "commit": "0c7edd3" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/137/run-1692128368.json b/broadcast/DeploySessionKey.s.sol/137/run-1692128368.json new file mode 100644 index 00000000..4544108e --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/137/run-1692128368.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x20" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionIndex": "0x29", + "blockHash": "0x3b6fccbd0c26d67e0eefd24a717802ce2502ed9f6437efe1201d6aa26953beb6", + "blockNumber": "0x2c3366b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x55842f", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x00000000000000000000000046a3a41bd932244dd08186e4c19f1a7e48cbcdf4" + ], + "data": "0x000000000000000000000000000000000000000000000000006ef645201155650000000000000000000000000000000000000000000000172792ba5ad13a69530000000000000000000000000000000000000000000037b93f5cb7bbe4974ee10000000000000000000000000000000000000000000000172723c415b12913ee0000000000000000000000000000000000000000000037b93fcbae0104a8a446", + "blockHash": "0x3b6fccbd0c26d67e0eefd24a717802ce2502ed9f6437efe1201d6aa26953beb6", + "blockNumber": "0x2c3366b", + "transactionHash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionIndex": "0x29", + "logIndex": "0x7f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000800000000000000000000000000000000000000000000000004000000000000000000001800000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100002", + "type": "0x0", + "effectiveGasPrice": "0x14e0360a9d" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128368, + "chain": 137, + "multi": false, + "commit": "0c7edd3" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/137/run-latest.json b/broadcast/DeploySessionKey.s.sol/137/run-latest.json new file mode 100644 index 00000000..4544108e --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/137/run-latest.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x20" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionIndex": "0x29", + "blockHash": "0x3b6fccbd0c26d67e0eefd24a717802ce2502ed9f6437efe1201d6aa26953beb6", + "blockNumber": "0x2c3366b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x55842f", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x00000000000000000000000046a3a41bd932244dd08186e4c19f1a7e48cbcdf4" + ], + "data": "0x000000000000000000000000000000000000000000000000006ef645201155650000000000000000000000000000000000000000000000172792ba5ad13a69530000000000000000000000000000000000000000000037b93f5cb7bbe4974ee10000000000000000000000000000000000000000000000172723c415b12913ee0000000000000000000000000000000000000000000037b93fcbae0104a8a446", + "blockHash": "0x3b6fccbd0c26d67e0eefd24a717802ce2502ed9f6437efe1201d6aa26953beb6", + "blockNumber": "0x2c3366b", + "transactionHash": "0x22f8a9fe06cb1d23677cda53fd2c4b8ca6f414aea32d0f1f6bb583cd3b064420", + "transactionIndex": "0x29", + "logIndex": "0x7f", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000800000000000000000000000000000000000000000000000004000000000000000000001800000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100002", + "type": "0x0", + "effectiveGasPrice": "0x14e0360a9d" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128368, + "chain": 137, + "multi": false, + "commit": "0c7edd3" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/420/run-1691518119.json b/broadcast/DeploySessionKey.s.sol/420/run-1691518119.json new file mode 100644 index 00000000..eab5e1c7 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/420/run-1691518119.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xe485282460c458e57a5aa69e6cd698270ebe5a1cebcd5d8b422ccc665a5a9295", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xe485282460c458e57a5aa69e6cd698270ebe5a1cebcd5d8b422ccc665a5a9295" + ], + "returns": {}, + "timestamp": 1691518119, + "chain": 420, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/420/run-1691518126.json b/broadcast/DeploySessionKey.s.sol/420/run-1691518126.json new file mode 100644 index 00000000..57541b9f --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/420/run-1691518126.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xe485282460c458e57a5aa69e6cd698270ebe5a1cebcd5d8b422ccc665a5a9295", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe485282460c458e57a5aa69e6cd698270ebe5a1cebcd5d8b422ccc665a5a9295", + "transactionIndex": "0x1", + "blockHash": "0xf5f204cfd538d0416aa8e1eb946acca1cae5e70d99acdc8fc36e9272e951dfb3", + "blockNumber": "0xc70d22", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf30c3", + "gasUsed": "0xe799a", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e34" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691518126, + "chain": 420, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/420/run-1692073753.json b/broadcast/DeploySessionKey.s.sol/420/run-1692073753.json new file mode 100644 index 00000000..96adcd57 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/420/run-1692073753.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xaec1f0d2d0fac979381a27ca8e789038f147533422f850f155969107460f866d", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xaec1f0d2d0fac979381a27ca8e789038f147533422f850f155969107460f866d" + ], + "returns": {}, + "timestamp": 1692073753, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/420/run-1692073760.json b/broadcast/DeploySessionKey.s.sol/420/run-1692073760.json new file mode 100644 index 00000000..dca9e706 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/420/run-1692073760.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xaec1f0d2d0fac979381a27ca8e789038f147533422f850f155969107460f866d", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xaec1f0d2d0fac979381a27ca8e789038f147533422f850f155969107460f866d", + "transactionIndex": "0x1", + "blockHash": "0x7dbcdbae7d072bbf1f8c10e68e51dd0f1fdd60a4707e8450d637756402318c3f", + "blockNumber": "0xcb4a5b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf2dd0", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073760, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/420/run-latest.json b/broadcast/DeploySessionKey.s.sol/420/run-latest.json new file mode 100644 index 00000000..dca9e706 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/420/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xaec1f0d2d0fac979381a27ca8e789038f147533422f850f155969107460f866d", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xaec1f0d2d0fac979381a27ca8e789038f147533422f850f155969107460f866d", + "transactionIndex": "0x1", + "blockHash": "0x7dbcdbae7d072bbf1f8c10e68e51dd0f1fdd60a4707e8450d637756402318c3f", + "blockNumber": "0xcb4a5b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf2dd0", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073760, + "chain": 420, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/42161/run-1692128782.json b/broadcast/DeploySessionKey.s.sol/42161/run-1692128782.json new file mode 100644 index 00000000..49809bb8 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/42161/run-1692128782.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xbcddbef5f84c94aeef651b6b09c145c66c6df6fd54a19ebdc62ef7a9af1544a7", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1f08403", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbcddbef5f84c94aeef651b6b09c145c66c6df6fd54a19ebdc62ef7a9af1544a7", + "transactionIndex": "0x1", + "blockHash": "0xe2302c86f8bf9c2ce8749a4018449da345d9de985ee7377296c764ac529bc2bb", + "blockNumber": "0x7417123", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1554900", + "gasUsed": "0x1554900", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128782, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/42161/run-latest.json b/broadcast/DeploySessionKey.s.sol/42161/run-latest.json new file mode 100644 index 00000000..49809bb8 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/42161/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xbcddbef5f84c94aeef651b6b09c145c66c6df6fd54a19ebdc62ef7a9af1544a7", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1f08403", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbcddbef5f84c94aeef651b6b09c145c66c6df6fd54a19ebdc62ef7a9af1544a7", + "transactionIndex": "0x1", + "blockHash": "0xe2302c86f8bf9c2ce8749a4018449da345d9de985ee7377296c764ac529bc2bb", + "blockNumber": "0x7417123", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1554900", + "gasUsed": "0x1554900", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128782, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/421613/run-1691520310.json b/broadcast/DeploySessionKey.s.sol/421613/run-1691520310.json new file mode 100644 index 00000000..a0778419 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/421613/run-1691520310.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xc9ab82ff9492897aaf27fbced8e28a9c215b52f467abd4caa6b8a0db7dd0c148", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1313c9", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xc9ab82ff9492897aaf27fbced8e28a9c215b52f467abd4caa6b8a0db7dd0c148", + "transactionIndex": "0x1", + "blockHash": "0x102fe427bc0cd00b9d3acaa3f269b22d8f3035f7c4859c0b5402bda4f8c51b2b", + "blockNumber": "0x1fead1b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe799a", + "gasUsed": "0xe799a", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5aaedfd00" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520310, + "chain": 421613, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/421613/run-1692072464.json b/broadcast/DeploySessionKey.s.sol/421613/run-1692072464.json new file mode 100644 index 00000000..47a28165 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/421613/run-1692072464.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x9e32d03c85984c67d0baee90689c9303dc1d46d598ace131952e7066cbc320ea", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x130bf5", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x9e32d03c85984c67d0baee90689c9303dc1d46d598ace131952e7066cbc320ea", + "transactionIndex": "0x1", + "blockHash": "0xc35c00f94a20892ad6bc2722376319af95040e92ad9253feb343dbd370c6fdb9", + "blockNumber": "0x20d6521", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe73ab", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072464, + "chain": 421613, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/421613/run-latest.json b/broadcast/DeploySessionKey.s.sol/421613/run-latest.json new file mode 100644 index 00000000..47a28165 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/421613/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x9e32d03c85984c67d0baee90689c9303dc1d46d598ace131952e7066cbc320ea", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x130bf5", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x9e32d03c85984c67d0baee90689c9303dc1d46d598ace131952e7066cbc320ea", + "transactionIndex": "0x1", + "blockHash": "0xc35c00f94a20892ad6bc2722376319af95040e92ad9253feb343dbd370c6fdb9", + "blockNumber": "0x20d6521", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe73ab", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692072464, + "chain": 421613, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43113/run-1691520636.json b/broadcast/DeploySessionKey.s.sol/43113/run-1691520636.json new file mode 100644 index 00000000..1a6b1b3b --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43113/run-1691520636.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xcba0f5cb005c796e0947151cb9f5d66b402838f13647b8cc040fcb9ca0c2aed4", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xcba0f5cb005c796e0947151cb9f5d66b402838f13647b8cc040fcb9ca0c2aed4" + ], + "returns": {}, + "timestamp": 1691520636, + "chain": 43113, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43113/run-1691520642.json b/broadcast/DeploySessionKey.s.sol/43113/run-1691520642.json new file mode 100644 index 00000000..5e3fe7cd --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43113/run-1691520642.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xcba0f5cb005c796e0947151cb9f5d66b402838f13647b8cc040fcb9ca0c2aed4", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xcba0f5cb005c796e0947151cb9f5d66b402838f13647b8cc040fcb9ca0c2aed4", + "transactionIndex": "0x0", + "blockHash": "0x6b45ca86d1221d6800f2350f1d193d3b3d68387c390086d15f7575b3213ecf9a", + "blockNumber": "0x17b4492", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe799a", + "gasUsed": "0xe799a", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520642, + "chain": 43113, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43113/run-1692073040.json b/broadcast/DeploySessionKey.s.sol/43113/run-1692073040.json new file mode 100644 index 00000000..49875c9f --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43113/run-1692073040.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x391bda89d8d96e4877db9610b48a3e78d9de707d4a95b0339ed401062677b347", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x391bda89d8d96e4877db9610b48a3e78d9de707d4a95b0339ed401062677b347" + ], + "returns": {}, + "timestamp": 1692073040, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43113/run-1692073046.json b/broadcast/DeploySessionKey.s.sol/43113/run-1692073046.json new file mode 100644 index 00000000..3694b0c5 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43113/run-1692073046.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x391bda89d8d96e4877db9610b48a3e78d9de707d4a95b0339ed401062677b347", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x391bda89d8d96e4877db9610b48a3e78d9de707d4a95b0339ed401062677b347", + "transactionIndex": "0x0", + "blockHash": "0xc8a502784a73b44e25f5367c1a146d742e85da5fbede613b3ef217fb7d4cb642", + "blockNumber": "0x17d9eac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe73ab", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073046, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43113/run-latest.json b/broadcast/DeploySessionKey.s.sol/43113/run-latest.json new file mode 100644 index 00000000..3694b0c5 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43113/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x391bda89d8d96e4877db9610b48a3e78d9de707d4a95b0339ed401062677b347", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xa", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x391bda89d8d96e4877db9610b48a3e78d9de707d4a95b0339ed401062677b347", + "transactionIndex": "0x0", + "blockHash": "0xc8a502784a73b44e25f5367c1a146d742e85da5fbede613b3ef217fb7d4cb642", + "blockNumber": "0x17d9eac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe73ab", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692073046, + "chain": 43113, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43114/run-1692129118.json b/broadcast/DeploySessionKey.s.sol/43114/run-1692129118.json new file mode 100644 index 00000000..a3153fd3 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43114/run-1692129118.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x8e4de21534ffb1aa15a2ac7984210bb0fe764db579012ce5c59027ff257a9284", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x8e4de21534ffb1aa15a2ac7984210bb0fe764db579012ce5c59027ff257a9284" + ], + "returns": {}, + "timestamp": 1692129118, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43114/run-1692129131.json b/broadcast/DeploySessionKey.s.sol/43114/run-1692129131.json new file mode 100644 index 00000000..6697ddae --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43114/run-1692129131.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x8e4de21534ffb1aa15a2ac7984210bb0fe764db579012ce5c59027ff257a9284", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8e4de21534ffb1aa15a2ac7984210bb0fe764db579012ce5c59027ff257a9284", + "transactionIndex": "0x5", + "blockHash": "0xcf7993453360e3e80f758c97fa036805c4737d9a837f845255e1bbe6211ca196", + "blockNumber": "0x2064268", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1f9f56", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129131, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/43114/run-latest.json b/broadcast/DeploySessionKey.s.sol/43114/run-latest.json new file mode 100644 index 00000000..6697ddae --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/43114/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x8e4de21534ffb1aa15a2ac7984210bb0fe764db579012ce5c59027ff257a9284", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x6", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8e4de21534ffb1aa15a2ac7984210bb0fe764db579012ce5c59027ff257a9284", + "transactionIndex": "0x5", + "blockHash": "0xcf7993453360e3e80f758c97fa036805c4737d9a837f845255e1bbe6211ca196", + "blockNumber": "0x2064268", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1f9f56", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0x684ee1800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129131, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/5/run-1691517851.json b/broadcast/DeploySessionKey.s.sol/5/run-1691517851.json new file mode 100644 index 00000000..46ef7f2f --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/5/run-1691517851.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xe0a14f1f6c8451b3cc4a9404489edfa32529b788fce5cba06f05a4c23b477f01", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x45" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xe0a14f1f6c8451b3cc4a9404489edfa32529b788fce5cba06f05a4c23b477f01" + ], + "returns": {}, + "timestamp": 1691517851, + "chain": 5, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/5/run-1691517870.json b/broadcast/DeploySessionKey.s.sol/5/run-1691517870.json new file mode 100644 index 00000000..d170fe78 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/5/run-1691517870.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xe0a14f1f6c8451b3cc4a9404489edfa32529b788fce5cba06f05a4c23b477f01", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x45" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe0a14f1f6c8451b3cc4a9404489edfa32529b788fce5cba06f05a4c23b477f01", + "transactionIndex": "0x3d", + "blockHash": "0xfcf73eb43bae1ae11a19a89063596aa0306132c86130fda5fadb60b9fd944f8e", + "blockNumber": "0x90b813", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xef4dd6", + "gasUsed": "0xe7aa0", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x48a74148" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691517870, + "chain": 5, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/5/run-1692071407.json b/broadcast/DeploySessionKey.s.sol/5/run-1692071407.json new file mode 100644 index 00000000..5e4a5230 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/5/run-1692071407.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x6b64d0937a0dec7b63f1b49b2acbfb5fd038940372066d0cf5ce47e4ef9f5f89", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x6b64d0937a0dec7b63f1b49b2acbfb5fd038940372066d0cf5ce47e4ef9f5f89" + ], + "returns": {}, + "timestamp": 1692071407, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/5/run-1692071413.json b/broadcast/DeploySessionKey.s.sol/5/run-1692071413.json new file mode 100644 index 00000000..bb597558 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/5/run-1692071413.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x6b64d0937a0dec7b63f1b49b2acbfb5fd038940372066d0cf5ce47e4ef9f5f89", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x6b64d0937a0dec7b63f1b49b2acbfb5fd038940372066d0cf5ce47e4ef9f5f89", + "transactionIndex": "0x43", + "blockHash": "0x33d174077e51aa137ef49d0378df7edc64e8234bfd90da1bc511b97effd623a9", + "blockNumber": "0x9143ac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xb18e22", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692071413, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/5/run-latest.json b/broadcast/DeploySessionKey.s.sol/5/run-latest.json new file mode 100644 index 00000000..bb597558 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/5/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x6b64d0937a0dec7b63f1b49b2acbfb5fd038940372066d0cf5ce47e4ef9f5f89", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x6b64d0937a0dec7b63f1b49b2acbfb5fd038940372066d0cf5ce47e4ef9f5f89", + "transactionIndex": "0x43", + "blockHash": "0x33d174077e51aa137ef49d0378df7edc64e8234bfd90da1bc511b97effd623a9", + "blockNumber": "0x9143ac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xb18e22", + "gasUsed": "0xe74af", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e109" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692071413, + "chain": 5, + "multi": false, + "commit": "e74c511" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/56/run-1692288791.json b/broadcast/DeploySessionKey.s.sol/56/run-1692288791.json new file mode 100644 index 00000000..4c0e5e00 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/56/run-1692288791.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x8981f3e21650e450d235343aff67e2ba64b57b6208ae7c76fc42b94c574ea05b", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x8981f3e21650e450d235343aff67e2ba64b57b6208ae7c76fc42b94c574ea05b" + ], + "returns": {}, + "timestamp": 1692288791, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/56/run-1692288798.json b/broadcast/DeploySessionKey.s.sol/56/run-1692288798.json new file mode 100644 index 00000000..3eeeeba9 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/56/run-1692288798.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x8981f3e21650e450d235343aff67e2ba64b57b6208ae7c76fc42b94c574ea05b", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8981f3e21650e450d235343aff67e2ba64b57b6208ae7c76fc42b94c574ea05b", + "transactionIndex": "0xa", + "blockHash": "0x775da3d880bd487bef761000ad6b1f669e3346ab139de9060bdcfcfae46ee6ae", + "blockNumber": "0x1d80cae", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1859cf", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288798, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/56/run-latest.json b/broadcast/DeploySessionKey.s.sol/56/run-latest.json new file mode 100644 index 00000000..3eeeeba9 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/56/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x8981f3e21650e450d235343aff67e2ba64b57b6208ae7c76fc42b94c574ea05b", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x8981f3e21650e450d235343aff67e2ba64b57b6208ae7c76fc42b94c574ea05b", + "transactionIndex": "0xa", + "blockHash": "0x775da3d880bd487bef761000ad6b1f669e3346ab139de9060bdcfcfae46ee6ae", + "blockNumber": "0x1d80cae", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x1859cf", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288798, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-1685599437.json b/broadcast/DeploySessionKey.s.sol/80001/run-1685599437.json new file mode 100644 index 00000000..0a829104 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-1685599437.json @@ -0,0 +1,60 @@ +{ + "transactions": [ + { + "hash": "0x9ca482e48e697745e5cdaf253ea370103c47ef0d956e98c7fb168045a0b7ec03", + "transactionType": "CREATE", + "contractName": "ERC721Actions", + "contractAddress": "0xc5580411041d96EC591d7fa4C57638E29F084b89", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x22261", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631888bfd714602d575b600080fd5b603c603836600460c4565b603e565b005b6040516323b872dd60e01b81523060048201526001600160a01b038281166024830152604482018490528416906323b872dd90606401600060405180830381600087803b158015608d57600080fd5b505af115801560a0573d6000803e3d6000fd5b50505050505050565b80356001600160a01b038116811460bf57600080fd5b919050565b60008060006060848603121560d857600080fd5b60df8460a9565b92506020840135915060f26040850160a9565b9050925092509256", + "nonce": "0x31", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe3770ecf0a7b9f608efe64127c035446fdbccba7319f8040f04716a988d76d1a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x102c59", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610c21806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610969565b610179565b005b61008461007f3660046109ab565b61034c565b6040519081526020015b60405180910390f35b6100846100a53660046109f7565b61038e565b61006f6100b8366004610969565b610668565b61012c6100cb366004610a67565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a9a565b61019191610ac4565b60601c905060006101a6601860148587610a9a565b6101af91610af9565b905060006101c1601c60188688610a9a565b6101ca91610af9565b905060006101dc6022601c8789610a9a565b6101e591610b27565b60d01c905060006101fa60286022888a610a9a565b61020391610b27565b60d01c90506000610218602c6028898b610a9a565b61022191610af9565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081526001600160a01b039b909b166000908152808b52848120338252909a5292909820905181549751985195519251995164ffffffffff1990981690151564ffffffff0019161761010098841c98909802979097176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b959092169490940263ffffffff60a81b191617600160a81b63ffffffff90921691909102179055505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103e8846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000610438826103fe610140890189610b55565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106ad92505050565b6001600160a01b03811660009081526020818152604082209293509091908290610464908a018a610b9c565b6001600160a01b031681526020810191909152604001600020805490915060ff166104955760019350505050610661565b8054610100900460e01b6001600160e01b0319166104b66060890189610b55565b6104c591600491600091610a9a565b6104ce91610af9565b6001600160e01b0319161461051e5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610385565b600061052d6060890189610b55565b8354600160a81b900463ffffffff1690610548826014610bb7565b63ffffffff169261055b93929190610a9a565b61056491610ac4565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190610be9565b61062f5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610385565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106776014828486610a9a565b61068091610ac4565b60601c600090815260208181526040808320338452909152902080546001600160c81b0319169055505050565b60008060006106bc85856106d1565b915091506106c981610716565b509392505050565b60008082516041036107075760208301516040840151606085015160001a6106fb87828585610863565b9450945050505061070f565b506000905060025b9250929050565b600081600481111561072a5761072a610c0b565b036107325750565b600181600481111561074657610746610c0b565b036107935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610385565b60028160048111156107a7576107a7610c0b565b036107f45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610385565b600381600481111561080857610808610c0b565b036108605760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610385565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561089a575060009050600361091e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109175760006001925092505061091e565b9150600090505b94509492505050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b60208301915083602082850101111561070f57600080fd5b6000806020838503121561097c57600080fd5b823567ffffffffffffffff81111561099357600080fd5b61099f85828601610927565b90969095509350505050565b6000806000604084860312156109c057600080fd5b83359250602084013567ffffffffffffffff8111156109de57600080fd5b6109ea86828701610927565b9497909650939450505050565b600080600060608486031215610a0c57600080fd5b833567ffffffffffffffff811115610a2357600080fd5b84016101608187031215610a3657600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a6257600080fd5b919050565b60008060408385031215610a7a57600080fd5b610a8383610a4b565b9150610a9160208401610a4b565b90509250929050565b60008085851115610aaa57600080fd5b83861115610ab757600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610af15780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610af15760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610af15760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6c57600080fd5b83018035915067ffffffffffffffff821115610b8757600080fd5b60200191503681900382131561070f57600080fd5b600060208284031215610bae57600080fd5b61066182610a4b565b63ffffffff818116838216019080821115610be257634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bfb57600080fd5b8151801515811461066157600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000c5580411041d96ec591d7fa4c57638e29f084b89", + "nonce": "0x32", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xBd2EbA64275AA098D61420a75e30a3cE4B3D5F04", + "initCode": "608060405234801561001057600080fd5b50610c21806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610969565b610179565b005b61008461007f3660046109ab565b61034c565b6040519081526020015b60405180910390f35b6100846100a53660046109f7565b61038e565b61006f6100b8366004610969565b610668565b61012c6100cb366004610a67565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a9a565b61019191610ac4565b60601c905060006101a6601860148587610a9a565b6101af91610af9565b905060006101c1601c60188688610a9a565b6101ca91610af9565b905060006101dc6022601c8789610a9a565b6101e591610b27565b60d01c905060006101fa60286022888a610a9a565b61020391610b27565b60d01c90506000610218602c6028898b610a9a565b61022191610af9565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081526001600160a01b039b909b166000908152808b52848120338252909a5292909820905181549751985195519251995164ffffffffff1990981690151564ffffffff0019161761010098841c98909802979097176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b959092169490940263ffffffff60a81b191617600160a81b63ffffffff90921691909102179055505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103e8846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000610438826103fe610140890189610b55565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106ad92505050565b6001600160a01b03811660009081526020818152604082209293509091908290610464908a018a610b9c565b6001600160a01b031681526020810191909152604001600020805490915060ff166104955760019350505050610661565b8054610100900460e01b6001600160e01b0319166104b66060890189610b55565b6104c591600491600091610a9a565b6104ce91610af9565b6001600160e01b0319161461051e5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610385565b600061052d6060890189610b55565b8354600160a81b900463ffffffff1690610548826014610bb7565b63ffffffff169261055b93929190610a9a565b61056491610ac4565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190610be9565b61062f5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610385565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106776014828486610a9a565b61068091610ac4565b60601c600090815260208181526040808320338452909152902080546001600160c81b0319169055505050565b60008060006106bc85856106d1565b915091506106c981610716565b509392505050565b60008082516041036107075760208301516040840151606085015160001a6106fb87828585610863565b9450945050505061070f565b506000905060025b9250929050565b600081600481111561072a5761072a610c0b565b036107325750565b600181600481111561074657610746610c0b565b036107935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610385565b60028160048111156107a7576107a7610c0b565b036107f45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610385565b600381600481111561080857610808610c0b565b036108605760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610385565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561089a575060009050600361091e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109175760006001925092505061091e565b9150600090505b94509492505050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b60208301915083602082850101111561070f57600080fd5b6000806020838503121561097c57600080fd5b823567ffffffffffffffff81111561099357600080fd5b61099f85828601610927565b90969095509350505050565b6000806000604084860312156109c057600080fd5b83359250602084013567ffffffffffffffff8111156109de57600080fd5b6109ea86828701610927565b9497909650939450505050565b600080600060608486031215610a0c57600080fd5b833567ffffffffffffffff811115610a2357600080fd5b84016101608187031215610a3657600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a6257600080fd5b919050565b60008060408385031215610a7a57600080fd5b610a8383610a4b565b9150610a9160208401610a4b565b90509250929050565b60008085851115610aaa57600080fd5b83861115610ab757600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610af15780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610af15760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610af15760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6c57600080fd5b83018035915067ffffffffffffffff821115610b8757600080fd5b60200191503681900382131561070f57600080fd5b600060208284031215610bae57600080fd5b61066182610a4b565b63ffffffff818116838216019080821115610be257634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bfb57600080fd5b8151801515811461066157600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000c5580411041d96ec591d7fa4c57638e29f084b89" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x9ca482e48e697745e5cdaf253ea370103c47ef0d956e98c7fb168045a0b7ec03", + "0xe3770ecf0a7b9f608efe64127c035446fdbccba7319f8040f04716a988d76d1a" + ], + "returns": {}, + "timestamp": 1685599437, + "chain": 80001, + "multi": false, + "commit": "1bfa1a7" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-1685599444.json b/broadcast/DeploySessionKey.s.sol/80001/run-1685599444.json new file mode 100644 index 00000000..44963525 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-1685599444.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0x9ca482e48e697745e5cdaf253ea370103c47ef0d956e98c7fb168045a0b7ec03", + "transactionType": "CREATE", + "contractName": "ERC721Actions", + "contractAddress": "0xc5580411041d96EC591d7fa4C57638E29F084b89", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x22261", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631888bfd714602d575b600080fd5b603c603836600460c4565b603e565b005b6040516323b872dd60e01b81523060048201526001600160a01b038281166024830152604482018490528416906323b872dd90606401600060405180830381600087803b158015608d57600080fd5b505af115801560a0573d6000803e3d6000fd5b50505050505050565b80356001600160a01b038116811460bf57600080fd5b919050565b60008060006060848603121560d857600080fd5b60df8460a9565b92506020840135915060f26040850160a9565b9050925092509256", + "nonce": "0x31", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe3770ecf0a7b9f608efe64127c035446fdbccba7319f8040f04716a988d76d1a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x7a0d94f55792c434d74a40883c6ed8545e406d12", + "gas": "0x102c59", + "value": "0x0", + "data": "0x608060405234801561001057600080fd5b50610c21806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610969565b610179565b005b61008461007f3660046109ab565b61034c565b6040519081526020015b60405180910390f35b6100846100a53660046109f7565b61038e565b61006f6100b8366004610969565b610668565b61012c6100cb366004610a67565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a9a565b61019191610ac4565b60601c905060006101a6601860148587610a9a565b6101af91610af9565b905060006101c1601c60188688610a9a565b6101ca91610af9565b905060006101dc6022601c8789610a9a565b6101e591610b27565b60d01c905060006101fa60286022888a610a9a565b61020391610b27565b60d01c90506000610218602c6028898b610a9a565b61022191610af9565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081526001600160a01b039b909b166000908152808b52848120338252909a5292909820905181549751985195519251995164ffffffffff1990981690151564ffffffff0019161761010098841c98909802979097176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b959092169490940263ffffffff60a81b191617600160a81b63ffffffff90921691909102179055505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103e8846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000610438826103fe610140890189610b55565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106ad92505050565b6001600160a01b03811660009081526020818152604082209293509091908290610464908a018a610b9c565b6001600160a01b031681526020810191909152604001600020805490915060ff166104955760019350505050610661565b8054610100900460e01b6001600160e01b0319166104b66060890189610b55565b6104c591600491600091610a9a565b6104ce91610af9565b6001600160e01b0319161461051e5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610385565b600061052d6060890189610b55565b8354600160a81b900463ffffffff1690610548826014610bb7565b63ffffffff169261055b93929190610a9a565b61056491610ac4565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190610be9565b61062f5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610385565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106776014828486610a9a565b61068091610ac4565b60601c600090815260208181526040808320338452909152902080546001600160c81b0319169055505050565b60008060006106bc85856106d1565b915091506106c981610716565b509392505050565b60008082516041036107075760208301516040840151606085015160001a6106fb87828585610863565b9450945050505061070f565b506000905060025b9250929050565b600081600481111561072a5761072a610c0b565b036107325750565b600181600481111561074657610746610c0b565b036107935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610385565b60028160048111156107a7576107a7610c0b565b036107f45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610385565b600381600481111561080857610808610c0b565b036108605760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610385565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561089a575060009050600361091e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109175760006001925092505061091e565b9150600090505b94509492505050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b60208301915083602082850101111561070f57600080fd5b6000806020838503121561097c57600080fd5b823567ffffffffffffffff81111561099357600080fd5b61099f85828601610927565b90969095509350505050565b6000806000604084860312156109c057600080fd5b83359250602084013567ffffffffffffffff8111156109de57600080fd5b6109ea86828701610927565b9497909650939450505050565b600080600060608486031215610a0c57600080fd5b833567ffffffffffffffff811115610a2357600080fd5b84016101608187031215610a3657600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a6257600080fd5b919050565b60008060408385031215610a7a57600080fd5b610a8383610a4b565b9150610a9160208401610a4b565b90509250929050565b60008085851115610aaa57600080fd5b83861115610ab757600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610af15780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610af15760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610af15760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6c57600080fd5b83018035915067ffffffffffffffff821115610b8757600080fd5b60200191503681900382131561070f57600080fd5b600060208284031215610bae57600080fd5b61066182610a4b565b63ffffffff818116838216019080821115610be257634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bfb57600080fd5b8151801515811461066157600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000c5580411041d96ec591d7fa4c57638e29f084b89", + "nonce": "0x32", + "accessList": [] + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xBd2EbA64275AA098D61420a75e30a3cE4B3D5F04", + "initCode": "608060405234801561001057600080fd5b50610c21806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c9595561461005c578063333daf92146100715780633a871cdd146100975780638fc925aa146100aa57806396ade1f9146100bd575b600080fd5b61006f61006a366004610969565b610179565b005b61008461007f3660046109ab565b61034c565b6040519081526020015b60405180910390f35b6100846100a53660046109f7565b61038e565b61006f6100b8366004610969565b610668565b61012c6100cb366004610a67565b600060208181529281526040808220909352908152205460ff811690610100810460e090811b9165010000000000810490911b9065ffffffffffff600160481b8204811691600160781b81049091169063ffffffff600160a81b9091041686565b6040805196151587526001600160e01b03199586166020880152939094169285019290925265ffffffffffff908116606085015216608083015263ffffffff1660a082015260c00161008e565b60006101886014828486610a9a565b61019191610ac4565b60601c905060006101a6601860148587610a9a565b6101af91610af9565b905060006101c1601c60188688610a9a565b6101ca91610af9565b905060006101dc6022601c8789610a9a565b6101e591610b27565b60d01c905060006101fa60286022888a610a9a565b61020391610b27565b60d01c90506000610218602c6028898b610a9a565b61022191610af9565b6040805160c081018252600181526001600160e01b031996871660208083019182529890971681830190815265ffffffffffff968716606083019081529587166080830190815260e094851c60a084019081526001600160a01b039b909b166000908152808b52848120338252909a5292909820905181549751985195519251995164ffffffffff1990981690151564ffffffff0019161761010098841c98909802979097176effffffffffffffffffff00000000001916650100000000009490921c939093026effffffffffff000000000000000000191617600160481b928416929092029190911769ffffffffffffffffffff60781b1916600160781b959092169490940263ffffffff60a81b191617600160a81b63ffffffff90921691909102179055505050565b60405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b60448201526000906064015b60405180910390fd5b6000806103e8846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000610438826103fe610140890189610b55565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106ad92505050565b6001600160a01b03811660009081526020818152604082209293509091908290610464908a018a610b9c565b6001600160a01b031681526020810191909152604001600020805490915060ff166104955760019350505050610661565b8054610100900460e01b6001600160e01b0319166104b66060890189610b55565b6104c591600491600091610a9a565b6104ce91610af9565b6001600160e01b0319161461051e5760405162461bcd60e51b81526020600482015260166024820152753737ba1039bab83837b93a32b21039b2b632b1ba37b960511b6044820152606401610385565b600061052d6060890189610b55565b8354600160a81b900463ffffffff1690610548826014610bb7565b63ffffffff169261055b93929190610a9a565b61056491610ac4565b82546040516301ffc9a760e01b81526501000000000090910460e01b6001600160e01b031916600482015260609190911c915081906301ffc9a790602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190610be9565b61062f5760405162461bcd60e51b815260206004820152601a60248201527f646f6573206e6f7420737570706f727420696e746572666163650000000000006044820152606401610385565b5054600160481b810460d01b6001600160d01b031916600160781b90910460a01b65ffffffffffff60a01b1617925050505b9392505050565b60006106776014828486610a9a565b61068091610ac4565b60601c600090815260208181526040808320338452909152902080546001600160c81b0319169055505050565b60008060006106bc85856106d1565b915091506106c981610716565b509392505050565b60008082516041036107075760208301516040840151606085015160001a6106fb87828585610863565b9450945050505061070f565b506000905060025b9250929050565b600081600481111561072a5761072a610c0b565b036107325750565b600181600481111561074657610746610c0b565b036107935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610385565b60028160048111156107a7576107a7610c0b565b036107f45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610385565b600381600481111561080857610808610c0b565b036108605760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610385565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561089a575060009050600361091e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109175760006001925092505061091e565b9150600090505b94509492505050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b60208301915083602082850101111561070f57600080fd5b6000806020838503121561097c57600080fd5b823567ffffffffffffffff81111561099357600080fd5b61099f85828601610927565b90969095509350505050565b6000806000604084860312156109c057600080fd5b83359250602084013567ffffffffffffffff8111156109de57600080fd5b6109ea86828701610927565b9497909650939450505050565b600080600060608486031215610a0c57600080fd5b833567ffffffffffffffff811115610a2357600080fd5b84016101608187031215610a3657600080fd5b95602085013595506040909401359392505050565b80356001600160a01b0381168114610a6257600080fd5b919050565b60008060408385031215610a7a57600080fd5b610a8383610a4b565b9150610a9160208401610a4b565b90509250929050565b60008085851115610aaa57600080fd5b83861115610ab757600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610af15780818660140360031b1b83161692505b505092915050565b6001600160e01b03198135818116916004851015610af15760049490940360031b84901b1690921692915050565b6001600160d01b03198135818116916006851015610af15760069490940360031b84901b1690921692915050565b6000808335601e19843603018112610b6c57600080fd5b83018035915067ffffffffffffffff821115610b8757600080fd5b60200191503681900382131561070f57600080fd5b600060208284031215610bae57600080fd5b61066182610a4b565b63ffffffff818116838216019080821115610be257634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215610bfb57600080fd5b8151801515811461066157600080fd5b634e487b7160e01b600052602160045260246000fd000000000000000000000000c5580411041d96ec591d7fa4c57638e29f084b89" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x9ca482e48e697745e5cdaf253ea370103c47ef0d956e98c7fb168045a0b7ec03", + "transactionIndex": "0x1", + "blockHash": "0x8a3f853d698bcb5fd1a53be1e5f0c748e0d7d03267755961da78fe42fe986842", + "blockNumber": "0x229e5bd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x86d24", + "gasUsed": "0x1a44b", + "contractAddress": "0xc5580411041d96EC591d7fa4C57638E29F084b89", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + ], + "data": "0x0000000000000000000000000000000000000000000000000000c3b6d36817500000000000000000000000000000000000000000000000000e744bd345e04e6c000000000000000000000000000000000000000000000a102d87c1768e870a300000000000000000000000000000000000000000000000000e73881c7278371c000000000000000000000000000000000000000000000a102d88852d61ef2180", + "blockHash": "0x8a3f853d698bcb5fd1a53be1e5f0c748e0d7d03267755961da78fe42fe986842", + "blockNumber": "0x229e5bd", + "transactionHash": "0x9ca482e48e697745e5cdaf253ea370103c47ef0d956e98c7fb168045a0b7ec03", + "transactionIndex": "0x1", + "logIndex": "0x9", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + }, + { + "transactionHash": "0xe3770ecf0a7b9f608efe64127c035446fdbccba7319f8040f04716a988d76d1a", + "transactionIndex": "0x2", + "blockHash": "0x8a3f853d698bcb5fd1a53be1e5f0c748e0d7d03267755961da78fe42fe986842", + "blockNumber": "0x229e5bd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x7A0D94F55792C434d74a40883C6ed8545E406D12", + "cumulativeGasUsed": "0x137c26", + "gasUsed": "0xb0f02", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" + ], + "data": "0x0000000000000000000000000000000000000000000000000005264a6d6637e00000000000000000000000000000000000000000000000000e73881c725df26c000000000000000000000000000000000000000000000a102d88852d61ef21800000000000000000000000000000000000000000000000000e6e61d204f7ba8c000000000000000000000000000000000000000000000a102d8dab77cf555960", + "blockHash": "0x8a3f853d698bcb5fd1a53be1e5f0c748e0d7d03267755961da78fe42fe986842", + "blockNumber": "0x229e5bd", + "transactionHash": "0xe3770ecf0a7b9f608efe64127c035446fdbccba7319f8040f04716a988d76d1a", + "transactionIndex": "0x2", + "logIndex": "0xa", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000080000000000000000000000000000000000000000004000000000000000000001000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "effectiveGasPrice": "0x77359400" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1685599444, + "chain": 80001, + "multi": false, + "commit": "1bfa1a7" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-1691516556.json b/broadcast/DeploySessionKey.s.sol/80001/run-1691516556.json new file mode 100644 index 00000000..b260743e --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-1691516556.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xa27e38a47c7041f7acd8717c02f5f02373ca91303b7296cdfb45d743af2a5582", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xa27e38a47c7041f7acd8717c02f5f02373ca91303b7296cdfb45d743af2a5582" + ], + "returns": {}, + "timestamp": 1691516556, + "chain": 80001, + "multi": false, + "commit": "3c4d8e8" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-1691516563.json b/broadcast/DeploySessionKey.s.sol/80001/run-1691516563.json new file mode 100644 index 00000000..d1a3e492 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-1691516563.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0xa27e38a47c7041f7acd8717c02f5f02373ca91303b7296cdfb45d743af2a5582", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa27e38a47c7041f7acd8717c02f5f02373ca91303b7296cdfb45d743af2a5582", + "transactionIndex": "0x10", + "blockHash": "0x3f08dfa76fd56ff482afd5a4c1130002c0ca5ba7e81b9885476269da91cd98db", + "blockNumber": "0x24fbf66", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x32f174", + "gasUsed": "0xe799a", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "data": "0x00000000000000000000000000000000000000000000000000050e2a98e34600000000000000000000000000000000000000000000000000145852c9926581ef00000000000000000000000000000000000000000000104dee61b5522b47e3680000000000000000000000000000000000000000000000001453449ef9823bef00000000000000000000000000000000000000000000104dee66c37cc42b2968", + "blockHash": "0x3f08dfa76fd56ff482afd5a4c1130002c0ca5ba7e81b9885476269da91cd98db", + "blockNumber": "0x24fbf66", + "transactionHash": "0xa27e38a47c7041f7acd8717c02f5f02373ca91303b7296cdfb45d743af2a5582", + "transactionIndex": "0x10", + "logIndex": "0x4a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691516563, + "chain": 80001, + "multi": false, + "commit": "3c4d8e8" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-1692030086.json b/broadcast/DeploySessionKey.s.sol/80001/run-1692030086.json new file mode 100644 index 00000000..1d41beee --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-1692030086.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b" + ], + "returns": {}, + "timestamp": 1692030086, + "chain": 80001, + "multi": false, + "commit": "fde9e99" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-1692030093.json b/broadcast/DeploySessionKey.s.sol/80001/run-1692030093.json new file mode 100644 index 00000000..6117227b --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-1692030093.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionIndex": "0x8", + "blockHash": "0xd4347e99f9f34f2a5196e6a31ec0f2dec666a0cb71606639be46972eb3f5ed98", + "blockNumber": "0x252f5eb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2519c5", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x00000000000000000000000000000000000000000000000000050c1817b46500000000000000000000000000000000000000000000000000144568185323da72000000000000000000000000000000000000000000001288016a016f3d542d6900000000000000000000000000000000000000000000000014405c003b6f7572000000000000000000000000000000000000000000001288016f0d8755089269", + "blockHash": "0xd4347e99f9f34f2a5196e6a31ec0f2dec666a0cb71606639be46972eb3f5ed98", + "blockNumber": "0x252f5eb", + "transactionHash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionIndex": "0x8", + "logIndex": "0x1c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692030093, + "chain": 80001, + "multi": false, + "commit": "fde9e99" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/80001/run-latest.json b/broadcast/DeploySessionKey.s.sol/80001/run-latest.json new file mode 100644 index 00000000..6117227b --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/80001/run-latest.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionIndex": "0x8", + "blockHash": "0xd4347e99f9f34f2a5196e6a31ec0f2dec666a0cb71606639be46972eb3f5ed98", + "blockNumber": "0x252f5eb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x2519c5", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x00000000000000000000000000000000000000000000000000050c1817b46500000000000000000000000000000000000000000000000000144568185323da72000000000000000000000000000000000000000000001288016a016f3d542d6900000000000000000000000000000000000000000000000014405c003b6f7572000000000000000000000000000000000000000000001288016f0d8755089269", + "blockHash": "0xd4347e99f9f34f2a5196e6a31ec0f2dec666a0cb71606639be46972eb3f5ed98", + "blockNumber": "0x252f5eb", + "transactionHash": "0xe61b1780434c498d9c99382e236692d8f37b6925e10331e9f5d348d4c235ce0b", + "transactionIndex": "0x8", + "logIndex": "0x1c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692030093, + "chain": 80001, + "multi": false, + "commit": "fde9e99" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/8453/run-1692129384.json b/broadcast/DeploySessionKey.s.sol/8453/run-1692129384.json new file mode 100644 index 00000000..38ceb08f --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/8453/run-1692129384.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x9bff67b1f9eeac89a1c68cceeae991cbdb75de95b099543c6da16c74701b3a41", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x9bff67b1f9eeac89a1c68cceeae991cbdb75de95b099543c6da16c74701b3a41" + ], + "returns": {}, + "timestamp": 1692129384, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/8453/run-1692129391.json b/broadcast/DeploySessionKey.s.sol/8453/run-1692129391.json new file mode 100644 index 00000000..7d405f1d --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/8453/run-1692129391.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x9bff67b1f9eeac89a1c68cceeae991cbdb75de95b099543c6da16c74701b3a41", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x9bff67b1f9eeac89a1c68cceeae991cbdb75de95b099543c6da16c74701b3a41", + "transactionIndex": "0x1", + "blockHash": "0x9d06bd6954eaf28b5b700247e5a3e143875c774c9531813863cb756a03248f39", + "blockNumber": "0x28bdc4", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf6db8", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e33" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129391, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/8453/run-latest.json b/broadcast/DeploySessionKey.s.sol/8453/run-latest.json new file mode 100644 index 00000000..7d405f1d --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/8453/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x9bff67b1f9eeac89a1c68cceeae991cbdb75de95b099543c6da16c74701b3a41", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x8", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x9bff67b1f9eeac89a1c68cceeae991cbdb75de95b099543c6da16c74701b3a41", + "transactionIndex": "0x1", + "blockHash": "0x9d06bd6954eaf28b5b700247e5a3e143875c774c9531813863cb756a03248f39", + "blockNumber": "0x28bdc4", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf6db8", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e33" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692129391, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/84531/run-1691520676.json b/broadcast/DeploySessionKey.s.sol/84531/run-1691520676.json new file mode 100644 index 00000000..60a6b10c --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/84531/run-1691520676.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xa6f1aec7f11fd85ac32e9aaff69cab10c0060f1d049e98c6b0071ef4c92917f2", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xa6f1aec7f11fd85ac32e9aaff69cab10c0060f1d049e98c6b0071ef4c92917f2" + ], + "returns": {}, + "timestamp": 1691520676, + "chain": 84531, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/84531/run-1691520682.json b/broadcast/DeploySessionKey.s.sol/84531/run-1691520682.json new file mode 100644 index 00000000..4f4d80b5 --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/84531/run-1691520682.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xa6f1aec7f11fd85ac32e9aaff69cab10c0060f1d049e98c6b0071ef4c92917f2", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x8e632447954036ee940eB0a6bC5a20A18543C4Fd", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x152b70", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611027908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fd6565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f7c578654968715610f4c5760010154958660601c60018114600014610ec357506105046101208301836103dc565b905015610e6f57610516905b826103dc565b806080999299528860a0528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60a05160558a81013590910101356001600160a01b038116810361033a57815260a0805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a57604082015260a051966001600160401b0360b560558c01358a0101351161033a57608051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260805160a05160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b60a051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160805101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d5939699506060870152013560a051010135600281101561033a57608084015260a051966001600160401b0360758901351161033a576080518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760805160a05190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b91013560a0510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e4b575b5015610dfa5761082560608201826103dc565b60441161033a576024602089015191013511610da35761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d4e5761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cff5760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cc457505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c8d575b50509050149283610b9e575b505050610b975760015b60ff16607082901b65ffffffffffff60a01b161760d09190911b6001600160d01b0319161790565b6000610b6f565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7f57600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9757915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5a60608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ed3575b5061051690610510565b610ee16101208401846103dc565b60141161033a573560601c03610ef75738610ec9565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60010154607081901b65ffffffffffff60a01b1660d09190911b6001600160d01b03191617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0x4", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa6f1aec7f11fd85ac32e9aaff69cab10c0060f1d049e98c6b0071ef4c92917f2", + "transactionIndex": "0x1", + "blockHash": "0xbabbbea871abb966b5e6131be74d559c7f37e205ba85931cfe04c6a3f01e0bb6", + "blockNumber": "0x7c90cc", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf30c3", + "gasUsed": "0xe799a", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1691520682, + "chain": 84531, + "multi": false, + "commit": "06a62a2" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/84531/run-1692074181.json b/broadcast/DeploySessionKey.s.sol/84531/run-1692074181.json new file mode 100644 index 00000000..e04b6abf --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/84531/run-1692074181.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xf1762c965bb628d23aaaa618d9b1f4a30477c2274473676588b84a6dcf3a6a19", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xf1762c965bb628d23aaaa618d9b1f4a30477c2274473676588b84a6dcf3a6a19" + ], + "returns": {}, + "timestamp": 1692074181, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/84531/run-1692074188.json b/broadcast/DeploySessionKey.s.sol/84531/run-1692074188.json new file mode 100644 index 00000000..e5c6727c --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/84531/run-1692074188.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xf1762c965bb628d23aaaa618d9b1f4a30477c2274473676588b84a6dcf3a6a19", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf1762c965bb628d23aaaa618d9b1f4a30477c2274473676588b84a6dcf3a6a19", + "transactionIndex": "0x1", + "blockHash": "0x0ee278887fc8473da042aeb283ee6a92a3d9bd362588783716348996d68c0ef9", + "blockNumber": "0x80c9dc", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf2ab0", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074188, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/DeploySessionKey.s.sol/84531/run-latest.json b/broadcast/DeploySessionKey.s.sol/84531/run-latest.json new file mode 100644 index 00000000..e5c6727c --- /dev/null +++ b/broadcast/DeploySessionKey.s.sol/84531/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xf1762c965bb628d23aaaa618d9b1f4a30477c2274473676588b84a6dcf3a6a19", + "transactionType": "CREATE2", + "contractName": "ExecuteSessionKeyValidator", + "contractAddress": "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1522c3", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611020908161001c8239f35b600080fdfe60c060408181526004908136101561001657600080fd5b600092833560e01c9081630c9595561461020c57508063333daf92146101de5780633a871cdd1461019557806352721fdd146101085780638fc925aa146100ab57639ea9bd591461006657600080fd5b346100a3573660031901126100a75761007d61033f565b506024356001600160401b0381116100a35761009c925036910161030d565b5050610fcf565b8280fd5b5080fd5b509060203660031901126100a3578035906001600160401b038211610104576100d69136910161030d565b6014929192116100a3576002913560601c83528260205280832033845260205282200160ff19815416905580f35b8380fd5b8382346100a757806003193601126100a75761012261033f565b6001600160a01b036024358181169290839003610191579160a09491849316825281602052828220908252602052209081549160ff600260018301549201541691805193845265ffffffffffff80831660208601528260301c169084015260601c606083015215156080820152f35b8480fd5b50600319836060368301126101db578335916001600160401b0383116100a7576101609083360301126101db57506020926101d491602435910161047d565b9051908152f35b80fd5b50346100a3573660031901126100a7576024356001600160401b0381116100a35761009c925036910161030d565b9290506020366003190112610104578035906001600160401b038211610191576102389136910161030d565b8060149492941161019157806034116101915780603a1161019157808311610191576054116101045760029161026d8261038a565b6014840135825260208201603485013560d01c81526bffffffffffff00000000000065ffffffffffff83850192603a88013560d01c845260608601948089013560601c8652608087019860018a523560601c8a5289602052808a20338b526020528920955186555116915160301b16916bffffffffffffffffffffffff19905160601b169117176001820155019051151560ff8019835416911617905580f35b9181601f8401121561033a578235916001600160401b03831161033a576020838186019501011161033a57565b600080fd5b600435906001600160a01b038216820361033a57565b9093929384831161033a57841161033a578101920390565b35906020811061037b575090565b6000199060200360031b1b1690565b60a081019081106001600160401b038211176103a557604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176103a557604052565b903590601e198136030182121561033a57018035906001600160401b03821161033a5760200191813603831361033a57565b6001600160401b0381116103a55760051b60200190565b1561042c57565b60405162461bcd60e51b815260206004820152602360248201527f53657373696f6e4b657956616c696461746f723a20706172616d206d69736d616044820152620e8c6d60eb1b6064820152608490fd5b9161014083019161048e83856103dc565b60149291921161033a576104a284866103dc565b60559391931161033a57803560601c600052600060205260406000203360005260205260406000209560ff60028801541615610f75578654968715610f455760010154958660601c60018114600014610ebc57506105046101208301836103dc565b905015610e6857610516905b826103dc565b8060a099929952886080528060551161033a5760406054198a83810103011261033a576001600160401b0360558a01351161033a5760a0906054199060558b01358b01908b0103011261033a5760405161056f8161038a565b60805160558a81013590910101356001600160a01b038116810361033a5781526080805160558b0135908101607501356020840152905101609501356001600160e01b03198116810361033a576040820152608051966001600160401b0360b560558c01358a0101351161033a5760a051880160558b0135890160b581013501607401121561033a5761061060558b8101358a0160b581013501013561040e565b9861061e6040519a8b6103bb565b60558b8101358a810160b581013590810190920135808d5260a05160805160208f019f949093918401918401016060909202919091016075011161033a576055820135908101908b0160b50135016075019b5b608051605583810135808301908e0160b5810135918201910190910135606002016075018e1015610701578d60609160a05101031261033a576040518060608101106001600160401b036060830111176103a557600660208f60608401604052803584520135101561033a576060916020918f8084604092013585840152013560408201528152019c019b610671565b50509093969960559295989b5060d59396995060608701520135608051010135600281101561033a576080840152608051966001600160401b0360758901351161033a5760a0518801607460758a01358a0101121561033a5761076d605560758a01358a01013561040e565b9661077b60405198896103bb565b605560758a01358a010135885260208801998a9760a05160805190810160758d816055818301358301013560051b910135840101011161033a57607590818d013501019b5b60758c816055818301358301013560051b9101356080510101018d10156107f1578c35815260209c8d019c016107c0565b5091939597995091939597995060018060a01b038751168015908115610e44575b5015610df35761082560608201826103dc565b60441161033a576024602089015191013511610d9c5761084860608201826103dc565b60841161033a576064013560ff166002811015610a9d576080880151906002821015610a9d5703610d475761088060608201826103dc565b60641161033a57604481013560048101106109c1576108a260608301836103dc565b6044830135602481016004909101116109c1576108d76108dd916108e893602460448701350191600460448801350191610355565b9061036d565b9260608101906103dc565b6024604484013585810182019101116109c1576024604481610914968287013501019401350191610355565b9790988860041161033a5760408801516001600160e01b03199081168b3590911603610cf85760005b60608901518051821015610ab3576020908260051b0101518051600401806004116109c157815190816004016004116109c1576024820182600401116109c1578d6108d7918e6024610990950192610355565b60208201516006811015610a9d576109d75760406109b092015114610425565b60001981146109c15760010161093d565b634e487b7160e01b600052601160045260246000fd5b60208201516006811015610a9d576001036109ff5760406109fa92015110610425565b6109b0565b60208201516006811015610a9d57600203610a225760406109fa92015111610425565b60208201516006811015610a9d57600303610a465760406109fa9201511115610425565b60208201516006811015610a9d57600403610a6a5760406109fa9201511015610425565b60208201516006811015610a9d57600514610a87575b50506109b0565b6040610a969201511415610425565b3880610a80565b634e487b7160e01b600052602160045260246000fd5b5050939750939750939790946040519060208083015260e082019060018060a01b0381511660408401526020810151606084015263ffffffff60e01b604082015116608084015260608101519160a08085015282518091526020610100850193019060005b818110610cbd57505050608001516002811015610a9d57610b4891839160c083015203601f1981018352826103bb565b602081519101209080519283610c86575b50509050149283610b97575b50505015610b915760d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b161790565b50600190565b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042060405192935091608081016001600160401b038111828210176103a55760405260418152602081019236605584011161033a576000809260417f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1608094826014602099018a3784606185015260405198516040526040840151908160605285526060840151851a885210915114165afa50600051903d15610c7857600060605260405260018060a01b0316903560601c14388080610b65565b638baa579f6000526004601cfd5b9260051b01602001905b8251811160051b9081526020835191185260206040600020920191818310610c9057915050803880610b59565b9091938451805182526020810151906006821015610a9d57826040606092602094856001970152015160408201520195019101919091610b18565b60405162461bcd60e51b815260206004820152602160248201527f53657373696f6e4b657956616c696461746f723a20736967206d69736d6174636044820152600d60fb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a206f7065726174696f6e206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b9050610e5360608301836103dc565b60241161033a576010013560601c1438610812565b60405162461bcd60e51b815260206004820152602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610ecc575b5061051690610510565b610eda6101208401846103dc565b60141161033a573560601c03610ef05738610ec2565b60405162461bcd60e51b815260206004820152602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b6001015460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617965093945050505050565b60405162461bcd60e51b815260206004820152602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a206e6f7420696d706c656d656044820152631b9d195960e21b6064820152608490fd", + "nonce": "0xe", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf1762c965bb628d23aaaa618d9b1f4a30477c2274473676588b84a6dcf3a6a19", + "transactionIndex": "0x1", + "blockHash": "0x0ee278887fc8473da042aeb283ee6a92a3d9bd362588783716348996d68c0ef9", + "blockNumber": "0x80c9dc", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xf2ab0", + "gasUsed": "0xe73ab", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692074188, + "chain": 84531, + "multi": false, + "commit": "951fd36" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/1/run-1692156425.json b/broadcast/StakeToFactory.s.sol/1/run-1692156425.json new file mode 100644 index 00000000..936203fd --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/1/run-1692156425.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x13" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36" + ], + "returns": {}, + "timestamp": 1692156425, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/1/run-1692156438.json b/broadcast/StakeToFactory.s.sol/1/run-1692156438.json new file mode 100644 index 00000000..e1646c86 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/1/run-1692156438.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x13" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionIndex": "0x5b", + "blockHash": "0xd75c3a981ab777bd3f795bea09b366d87e36d1a167f83b2256b3345f8b931f86", + "blockNumber": "0x1118262", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x6250d2", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xd75c3a981ab777bd3f795bea09b366d87e36d1a167f83b2256b3345f8b931f86", + "blockNumber": "0x1118262", + "transactionHash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionIndex": "0x5b", + "logIndex": "0xb8", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4abf9f270" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692156438, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/1/run-latest.json b/broadcast/StakeToFactory.s.sol/1/run-latest.json new file mode 100644 index 00000000..e1646c86 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/1/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x13" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionIndex": "0x5b", + "blockHash": "0xd75c3a981ab777bd3f795bea09b366d87e36d1a167f83b2256b3345f8b931f86", + "blockNumber": "0x1118262", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x6250d2", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xd75c3a981ab777bd3f795bea09b366d87e36d1a167f83b2256b3345f8b931f86", + "blockNumber": "0x1118262", + "transactionHash": "0x057d860d6097d6314e89903093ebf8e2480b1773f4739fdc94de417a1433ae36", + "transactionIndex": "0x5b", + "logIndex": "0xb8", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4abf9f270" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692156438, + "chain": 1, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/10/run-1692157058.json b/broadcast/StakeToFactory.s.sol/10/run-1692157058.json new file mode 100644 index 00000000..c75feb70 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/10/run-1692157058.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd" + ], + "returns": {}, + "timestamp": 1692157058, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/10/run-1692157065.json b/broadcast/StakeToFactory.s.sol/10/run-1692157065.json new file mode 100644 index 00000000..ecc4f33f --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/10/run-1692157065.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionIndex": "0x9", + "blockHash": "0x029cdad825502b283a6ebabc010f49be080547d85736528654442ee375e1ff03", + "blockNumber": "0x6743565", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x2b56a3", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x029cdad825502b283a6ebabc010f49be080547d85736528654442ee375e1ff03", + "blockNumber": "0x6743565", + "transactionHash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionIndex": "0x9", + "logIndex": "0x33", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x89eb" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157065, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/10/run-latest.json b/broadcast/StakeToFactory.s.sol/10/run-latest.json new file mode 100644 index 00000000..ecc4f33f --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/10/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionIndex": "0x9", + "blockHash": "0x029cdad825502b283a6ebabc010f49be080547d85736528654442ee375e1ff03", + "blockNumber": "0x6743565", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x2b56a3", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x029cdad825502b283a6ebabc010f49be080547d85736528654442ee375e1ff03", + "blockNumber": "0x6743565", + "transactionHash": "0x74f9d553773e7f153feff0df4740cb1492e34c094b15100c742f13f5db2d31bd", + "transactionIndex": "0x9", + "logIndex": "0x33", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x89eb" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157065, + "chain": 10, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/100/run-1692157427.json b/broadcast/StakeToFactory.s.sol/100/run-1692157427.json new file mode 100644 index 00000000..8c667904 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/100/run-1692157427.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf" + ], + "returns": {}, + "timestamp": 1692157427, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/100/run-1692157434.json b/broadcast/StakeToFactory.s.sol/100/run-1692157434.json new file mode 100644 index 00000000..9576c178 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/100/run-1692157434.json @@ -0,0 +1,64 @@ +{ + "transactions": [ + { + "hash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionIndex": "0x1", + "blockHash": "0x57097052d5ad7a7e3dda775abc59746d04b8dd89739fd8470c4576e6e43df7fe", + "blockNumber": "0x1c1e071", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x24c3f", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x57097052d5ad7a7e3dda775abc59746d04b8dd89739fd8470c4576e6e43df7fe", + "blockNumber": "0x1c1e071", + "transactionHash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157434, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/100/run-latest.json b/broadcast/StakeToFactory.s.sol/100/run-latest.json new file mode 100644 index 00000000..9576c178 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/100/run-latest.json @@ -0,0 +1,64 @@ +{ + "transactions": [ + { + "hash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionIndex": "0x1", + "blockHash": "0x57097052d5ad7a7e3dda775abc59746d04b8dd89739fd8470c4576e6e43df7fe", + "blockNumber": "0x1c1e071", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x24c3f", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x57097052d5ad7a7e3dda775abc59746d04b8dd89739fd8470c4576e6e43df7fe", + "blockNumber": "0x1c1e071", + "transactionHash": "0xfadbf47c265c22c9f0dec82ce1791c7915711a1c57aedf34a3eb3d41e4c943cf", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e08" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157434, + "chain": 100, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/137/run-1692154620.json b/broadcast/StakeToFactory.s.sol/137/run-1692154620.json new file mode 100644 index 00000000..1bc8b46c --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/137/run-1692154620.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x3635c9adc5dea00000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x21" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c" + ], + "returns": {}, + "timestamp": 1692154620, + "chain": 137, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/137/run-1692154627.json b/broadcast/StakeToFactory.s.sol/137/run-1692154627.json new file mode 100644 index 00000000..ebc11b00 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/137/run-1692154627.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x3635c9adc5dea00000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x21" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x417987", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000004da172c1fc6e98731400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000176ba914368ff8731400000000000000000000000000000000000000000000003635c9adc5dea00000", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x79", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000002f2a347ff97a1271eba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000328d911ad5d7fc71eba", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x7a", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x7b", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x00000000000000000000000067b94473d81d0cd00849d563c94d0432ac988b49" + ], + "data": "0x0000000000000000000000000000000000000000000000000008f806e8e13ebf00000000000000000000000000000000000000000000004da1924804555acb7400000000000000000000000000000000000000000000108b524de6efeef1353c00000000000000000000000000000000000000000000004da1894ffd6c798cb500000000000000000000000000000000000000000000108b5256def6d7d273fb", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x7c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000002000000004000800000000000000001000000008000000040000000800000108000000000000100020000000000000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x11011dd690" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692154627, + "chain": 137, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/137/run-latest.json b/broadcast/StakeToFactory.s.sol/137/run-latest.json new file mode 100644 index 00000000..ebc11b00 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/137/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x3635c9adc5dea00000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x21" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x417987", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000004da172c1fc6e98731400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000176ba914368ff8731400000000000000000000000000000000000000000000003635c9adc5dea00000", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x79", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000002f2a347ff97a1271eba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000328d911ad5d7fc71eba", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x7a", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x00000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x7b", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x00000000000000000000000067b94473d81d0cd00849d563c94d0432ac988b49" + ], + "data": "0x0000000000000000000000000000000000000000000000000008f806e8e13ebf00000000000000000000000000000000000000000000004da1924804555acb7400000000000000000000000000000000000000000000108b524de6efeef1353c00000000000000000000000000000000000000000000004da1894ffd6c798cb500000000000000000000000000000000000000000000108b5256def6d7d273fb", + "blockHash": "0x833052126e12dc9537fa291fd145b356e6b13b2de8c970e3f4cb84730ad18b12", + "blockNumber": "0x2c365cf", + "transactionHash": "0x77a223bbc3d265f7a600f817bd24c38b3d8f023646dad5f6398cd5f5c874fd1c", + "transactionIndex": "0x1d", + "logIndex": "0x7c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000002000000004000800000000000000001000000008000000040000000800000108000000000000100020000000000000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x11011dd690" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692154627, + "chain": 137, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/42161/run-1692157109.json b/broadcast/StakeToFactory.s.sol/42161/run-1692157109.json new file mode 100644 index 00000000..b1d0eee1 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/42161/run-1692157109.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x0b76662443f5bc595ffdc242336c5b420bbd17bb2782ad5e4765e414765cf626", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x978e6", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0b76662443f5bc595ffdc242336c5b420bbd17bb2782ad5e4765e414765cf626", + "transactionIndex": "0x1", + "blockHash": "0x858913fec551d70a4cdbc76dfb84eb0d2a753d4475d1694a13c5fbf26572ae4b", + "blockNumber": "0x742e755", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x5bc87", + "gasUsed": "0x5bc87", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x858913fec551d70a4cdbc76dfb84eb0d2a753d4475d1694a13c5fbf26572ae4b", + "blockNumber": "0x742e755", + "transactionHash": "0x0b76662443f5bc595ffdc242336c5b420bbd17bb2782ad5e4765e414765cf626", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157109, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/42161/run-latest.json b/broadcast/StakeToFactory.s.sol/42161/run-latest.json new file mode 100644 index 00000000..b1d0eee1 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/42161/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x0b76662443f5bc595ffdc242336c5b420bbd17bb2782ad5e4765e414765cf626", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x978e6", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0b76662443f5bc595ffdc242336c5b420bbd17bb2782ad5e4765e414765cf626", + "transactionIndex": "0x1", + "blockHash": "0x858913fec551d70a4cdbc76dfb84eb0d2a753d4475d1694a13c5fbf26572ae4b", + "blockNumber": "0x742e755", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x5bc87", + "gasUsed": "0x5bc87", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x858913fec551d70a4cdbc76dfb84eb0d2a753d4475d1694a13c5fbf26572ae4b", + "blockNumber": "0x742e755", + "transactionHash": "0x0b76662443f5bc595ffdc242336c5b420bbd17bb2782ad5e4765e414765cf626", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5f5e100" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157109, + "chain": 42161, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/43114/run-1692157199.json b/broadcast/StakeToFactory.s.sol/43114/run-1692157199.json new file mode 100644 index 00000000..aba73434 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/43114/run-1692157199.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76" + ], + "returns": {}, + "timestamp": 1692157199, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/43114/run-1692157206.json b/broadcast/StakeToFactory.s.sol/43114/run-1692157206.json new file mode 100644 index 00000000..2df9b486 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/43114/run-1692157206.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionIndex": "0x0", + "blockHash": "0xf757aef405e94d4bd052b6e204ddeed7bbb78f61dc351ddf19381e94f26378a0", + "blockNumber": "0x2067893", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x14481", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xf757aef405e94d4bd052b6e204ddeed7bbb78f61dc351ddf19381e94f26378a0", + "blockNumber": "0x2067893", + "transactionHash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5d21dba00" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157206, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/43114/run-latest.json b/broadcast/StakeToFactory.s.sol/43114/run-latest.json new file mode 100644 index 00000000..2df9b486 --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/43114/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionIndex": "0x0", + "blockHash": "0xf757aef405e94d4bd052b6e204ddeed7bbb78f61dc351ddf19381e94f26378a0", + "blockNumber": "0x2067893", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x14481", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xf757aef405e94d4bd052b6e204ddeed7bbb78f61dc351ddf19381e94f26378a0", + "blockNumber": "0x2067893", + "transactionHash": "0xa448bb77fb8297a91e93666b6abd46bdbc775d90590af82f6326f6430e524c76", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x5d21dba00" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157206, + "chain": 43114, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/56/run-1692288834.json b/broadcast/StakeToFactory.s.sol/56/run-1692288834.json new file mode 100644 index 00000000..20beb24c --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/56/run-1692288834.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043" + ], + "returns": {}, + "timestamp": 1692288834, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/56/run-1692288841.json b/broadcast/StakeToFactory.s.sol/56/run-1692288841.json new file mode 100644 index 00000000..507dd93e --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/56/run-1692288841.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionIndex": "0xc", + "blockHash": "0xf9c2a0e4e3cef31aa11231bdfff9d566ce6a277037ac0f9d856042a200c83ee4", + "blockNumber": "0x1d80cbd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xa3eeb", + "gasUsed": "0x13e41", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xf9c2a0e4e3cef31aa11231bdfff9d566ce6a277037ac0f9d856042a200c83ee4", + "blockNumber": "0x1d80cbd", + "transactionHash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionIndex": "0xc", + "logIndex": "0x10", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288841, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/56/run-latest.json b/broadcast/StakeToFactory.s.sol/56/run-latest.json new file mode 100644 index 00000000..507dd93e --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/56/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0xde0b6b3a7640000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionIndex": "0xc", + "blockHash": "0xf9c2a0e4e3cef31aa11231bdfff9d566ce6a277037ac0f9d856042a200c83ee4", + "blockNumber": "0x1d80cbd", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0xa3eeb", + "gasUsed": "0x13e41", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xf9c2a0e4e3cef31aa11231bdfff9d566ce6a277037ac0f9d856042a200c83ee4", + "blockNumber": "0x1d80cbd", + "transactionHash": "0x09952c7adc8fd319e82be636c033e7c1256fd341599688a6b7e9870723ff0043", + "transactionIndex": "0xc", + "logIndex": "0x10", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x12a05f200" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692288841, + "chain": 56, + "multi": false, + "commit": "49de4da" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/80001/run-1692128251.json b/broadcast/StakeToFactory.s.sol/80001/run-1692128251.json new file mode 100644 index 00000000..42719efa --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/80001/run-1692128251.json @@ -0,0 +1,33 @@ +{ + "transactions": [ + { + "hash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x11734", + "value": "0x8ac7230489e80000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336" + ], + "returns": {}, + "timestamp": 1692128251, + "chain": 80001, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/80001/run-1692128258.json b/broadcast/StakeToFactory.s.sol/80001/run-1692128258.json new file mode 100644 index 00000000..8f5310df --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/80001/run-1692128258.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x11734", + "value": "0x8ac7230489e80000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x2ad1d9", + "gasUsed": "0xbee9", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000a590f4fbbdbe375800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac9d1f733d637580000000000000000000000000000000000000000000000008ac7230489e80000", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x0000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000009244454fc3045ff0f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092cf0c72c78e47f0f4", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0x9", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000008ac7230489e800010000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x000000000000000000000000000000000000000000000000000047be0eb974d2000000000000000000000000000000000000000000000000a5915de7d06425000000000000000000000000000000000000000000000033c1ccf4c9d71c9a4c53000000000000000000000000000000000000000000000000a5911629c1aab02e0000000000000000000000000000000000000000000033c1ccf511952b53c125", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0xb", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000002000000004000000000000000000001000000000000000040000000800000108040000000000100000000000000000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x6033df12" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128258, + "chain": 80001, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/80001/run-latest.json b/broadcast/StakeToFactory.s.sol/80001/run-latest.json new file mode 100644 index 00000000..8f5310df --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/80001/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x11734", + "value": "0x8ac7230489e80000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x2ad1d9", + "gasUsed": "0xbee9", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000a590f4fbbdbe375800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac9d1f733d637580000000000000000000000000000000000000000000000008ac7230489e80000", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3", + "0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789" + ], + "data": "0x0000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000009244454fc3045ff0f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092cf0c72c78e47f0f4", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0x9", + "removed": false + }, + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x0000000000000000000000000000000000000000000000008ac7230489e800010000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000be188d6641e8b680743a4815dfa0f6208038960f" + ], + "data": "0x000000000000000000000000000000000000000000000000000047be0eb974d2000000000000000000000000000000000000000000000000a5915de7d06425000000000000000000000000000000000000000000000033c1ccf4c9d71c9a4c53000000000000000000000000000000000000000000000000a5911629c1aab02e0000000000000000000000000000000000000000000033c1ccf511952b53c125", + "blockHash": "0x8a0c2b7cc4888225f67a9d4c47272fa74e3dd751ffc9d7ff8df68a567154fcaf", + "blockNumber": "0x25390b6", + "transactionHash": "0x557d4f94a996db81eab451f19ee1b44d39894769abe251252fffe28fc1440336", + "transactionIndex": "0x4", + "logIndex": "0xb", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200100000000000108000000000000000000000000000000000000000000000000000000000800000000000000000000100000000004600000000080000000000000000000000000000000000004080800000000000000000000000000000000000000000000000000000000080000000080000000000201000000000000000000000000000000000000000000000000002000000004000000000000000000001000000000000000040000000800000108040000000000100000000000000000000000000000000000200000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x6033df12" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692128258, + "chain": 80001, + "multi": false, + "commit": "c78ecd8" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/8453/run-1692157271.json b/broadcast/StakeToFactory.s.sol/8453/run-1692157271.json new file mode 100644 index 00000000..60c5d22e --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/8453/run-1692157271.json @@ -0,0 +1,34 @@ +{ + "transactions": [ + { + "hash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562" + ], + "returns": {}, + "timestamp": 1692157271, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/8453/run-1692157277.json b/broadcast/StakeToFactory.s.sol/8453/run-1692157277.json new file mode 100644 index 00000000..ea6e450b --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/8453/run-1692157277.json @@ -0,0 +1,64 @@ +{ + "transactions": [ + { + "hash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionIndex": "0x1", + "blockHash": "0x7946a411d665a7e06cd596050ffa783d29e21d9700785126bd5cc18321096b99", + "blockNumber": "0x28f43b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x23e82", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x7946a411d665a7e06cd596050ffa783d29e21d9700785126bd5cc18321096b99", + "blockNumber": "0x28f43b", + "transactionHash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e3e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157277, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/broadcast/StakeToFactory.s.sol/8453/run-latest.json b/broadcast/StakeToFactory.s.sol/8453/run-latest.json new file mode 100644 index 00000000..ea6e450b --- /dev/null +++ b/broadcast/StakeToFactory.s.sol/8453/run-latest.json @@ -0,0 +1,64 @@ +{ + "transactions": [ + { + "hash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962e15ae3", + "gas": "0x1da96", + "value": "0x2386f26fc10000", + "data": "0x0396cb600000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionIndex": "0x1", + "blockHash": "0x7946a411d665a7e06cd596050ffa783d29e21d9700785126bd5cc18321096b99", + "blockNumber": "0x28f43b", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3", + "cumulativeGasUsed": "0x23e82", + "gasUsed": "0x14481", + "contractAddress": null, + "logs": [ + { + "address": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x0000000000000000000000005de4839a76cf55d0c90e2061ef4386d962e15ae3" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x7946a411d665a7e06cd596050ffa783d29e21d9700785126bd5cc18321096b99", + "blockNumber": "0x28f43b", + "transactionHash": "0x373d74f4583f6ed1709bc023d4040e8ee580e42d897114e0f635bfbc46f5d562", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000010000000800000000000000000000000000200000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000100000000000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e3e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1692157277, + "chain": 8453, + "multi": false, + "commit": "4d26148" +} \ No newline at end of file diff --git a/bytes b/bytes new file mode 100644 index 00000000..88441a29 --- /dev/null +++ b/bytes @@ -0,0 +1,9 @@ +0x51945447 +000000000000000000000000c7183455a4c133ae270771860664b6b7ec320bb1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000080 +0000000000000000000000000000000000000000000000000000000000000001 +0000000000000000000000000000000000000000000000000000000000000044 +a9059cbb0000000000000000000000005c4d2bd3510c8b51edb17766d3c96ec6 +3732699900000000000000000000000000000000000000000000000000000000 +0000006400000000000000000000000000000000000000000000000000000000 diff --git a/deploy/deploy-all.ts b/deploy/deploy-all.ts deleted file mode 100644 index 11fbac13..00000000 --- a/deploy/deploy-all.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { HardhatRuntimeEnvironment } from 'hardhat/types' -import { DeployFunction } from 'hardhat-deploy/types' - -// 0.6 -const entrypoint = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"; - -const deployKernel: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const { deployments, ethers } = hre; - const { deploy } = deployments; - const [deployer] = await ethers.getSigners(); - console.log("Deployer address: ", await deployer.getAddress()); - const deployerAddress = await deployer.getAddress(); - - const KernelFactory = await ethers.getContractFactory("KernelFactory"); - - // Create a contract instance without deploying - const contractInstance = KernelFactory.getDeployTransaction(entrypoint); - - // Estimate gas limit for the deployment transaction - const gasEstimate = await deployer.estimateGas(contractInstance); - - - // Retrieve the current gas price from the provider - const gasPrice = await deployer.provider!.getGasPrice(); - - console.log("Gas limit for deployment:", gasEstimate.toString()); - console.log("Current gas price:", gasPrice.toString()); - - - await deploy('KernelFactory', { - from: deployerAddress, - args: [entrypoint], - log: true, - deterministicDeployment: true, - }); - - await deploy('ZeroDevSessionKeyPlugin', { - from: deployerAddress, - log: true, - deterministicDeployment: true, - }); -} - -export default deployKernel -deployKernel.tags = ['ZeroDev'] \ No newline at end of file diff --git a/deployments/arbitrum/.chainId b/deployments/arbitrum/.chainId deleted file mode 100644 index 7df83ecb..00000000 --- a/deployments/arbitrum/.chainId +++ /dev/null @@ -1 +0,0 @@ -42161 \ No newline at end of file diff --git a/deployments/arbitrum/KernelFactory.json b/deployments/arbitrum/KernelFactory.json deleted file mode 100644 index 0933f682..00000000 --- a/deployments/arbitrum/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xcc99f182a598047e2b16d92459e04ac3f1c6ee3c7550cc546e2aad41f8ccf6fe", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 1, - "gasUsed": "37893948", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6cb89b7589b74efc4db91fc40459697e25b3e4fae4135297d97a29594d246786", - "transactionHash": "0xcc99f182a598047e2b16d92459e04ac3f1c6ee3c7550cc546e2aad41f8ccf6fe", - "logs": [], - "blockNumber": 81926710, - "cumulativeGasUsed": "37893948", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/arbitrum/ZeroDevSessionKeyPlugin.json b/deployments/arbitrum/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 16744ecd..00000000 --- a/deployments/arbitrum/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x5f45aa2b47d17479406aa90750721f5ca39cbf2e456763ab4824bf3ca583be26", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 1, - "gasUsed": "19840564", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xefcde13f9d160b0917e495e503670ff018f8139a9b840f36587d923ab2bd0ae4", - "transactionHash": "0x5f45aa2b47d17479406aa90750721f5ca39cbf2e456763ab4824bf3ca583be26", - "logs": [], - "blockNumber": 81926718, - "cumulativeGasUsed": "19840564", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/arbitrum/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/arbitrum/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/arbitrum/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/arbitrumGoerli/.chainId b/deployments/arbitrumGoerli/.chainId deleted file mode 100644 index 16be23a3..00000000 --- a/deployments/arbitrumGoerli/.chainId +++ /dev/null @@ -1 +0,0 @@ -421613 \ No newline at end of file diff --git a/deployments/arbitrumGoerli/KernelFactory.json b/deployments/arbitrumGoerli/KernelFactory.json deleted file mode 100644 index b51b35cf..00000000 --- a/deployments/arbitrumGoerli/KernelFactory.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/arbitrumGoerli/ZeroDevSessionKeyPlugin.json b/deployments/arbitrumGoerli/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index ed4e31bf..00000000 --- a/deployments/arbitrumGoerli/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x9a7b87919aff70c4cdc91ec0708265a63355bdbf540a7e6766bdbbb78146654b", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 1, - "gasUsed": "39811357", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd4aa92397d61ce20898ef1878581f6e2fc2edce824b6a4fec65bd824b9b0872e", - "transactionHash": "0x9a7b87919aff70c4cdc91ec0708265a63355bdbf540a7e6766bdbbb78146654b", - "logs": [], - "blockNumber": 18851208, - "cumulativeGasUsed": "39811357", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/arbitrumGoerli/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json b/deployments/arbitrumGoerli/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json deleted file mode 100644 index d5d6537f..00000000 --- a/deployments/arbitrumGoerli/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/avalanche/.chainId b/deployments/avalanche/.chainId deleted file mode 100644 index 2d1acc42..00000000 --- a/deployments/avalanche/.chainId +++ /dev/null @@ -1 +0,0 @@ -43114 \ No newline at end of file diff --git a/deployments/avalanche/KernelFactory.json b/deployments/avalanche/KernelFactory.json deleted file mode 100644 index 06f38afd..00000000 --- a/deployments/avalanche/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x595058e2631957893924c91fc3ec117485a0aa4e85ae50a0efe7b03cf1cd5074", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 13, - "gasUsed": "3645194", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd28bedd0d0dcd8fe68f9ced8fceeeb823babd810145e6b6fcd7c381f24ea4009", - "transactionHash": "0x595058e2631957893924c91fc3ec117485a0aa4e85ae50a0efe7b03cf1cd5074", - "logs": [], - "blockNumber": 29002509, - "cumulativeGasUsed": "6986027", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/avalanche/ZeroDevSessionKeyPlugin.json b/deployments/avalanche/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index fc889581..00000000 --- a/deployments/avalanche/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x4913c31b1eb2a8078d00c552c6b1faa8db7cede29180054e09d4aeffcdd72207", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 8, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7078a30239af4074c2743dbbcabd30dbe5f5eda2f04ce9a96dc1d1d3ed5e4e69", - "transactionHash": "0x4913c31b1eb2a8078d00c552c6b1faa8db7cede29180054e09d4aeffcdd72207", - "logs": [], - "blockNumber": 29002577, - "cumulativeGasUsed": "3156416", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/avalanche/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/avalanche/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/avalanche/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/baseGoerli/.chainId b/deployments/baseGoerli/.chainId deleted file mode 100644 index 9b24bf02..00000000 --- a/deployments/baseGoerli/.chainId +++ /dev/null @@ -1 +0,0 @@ -84531 \ No newline at end of file diff --git a/deployments/baseGoerli/KernelFactory.json b/deployments/baseGoerli/KernelFactory.json deleted file mode 100644 index 23570846..00000000 --- a/deployments/baseGoerli/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x2ac80db42e6ee74d6cac152f55aa787d79908e5332d195abe991233916edba05", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 2, - "gasUsed": "3645194", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7500b674e126c4c2d8945a378d89fe28c70ec9c617ee663b2cc2eb75c2e6b112", - "transactionHash": "0x2ac80db42e6ee74d6cac152f55aa787d79908e5332d195abe991233916edba05", - "logs": [], - "blockNumber": 4035724, - "cumulativeGasUsed": "3853626", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/baseGoerli/ZeroDevSessionKeyPlugin.json b/deployments/baseGoerli/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 371bf702..00000000 --- a/deployments/baseGoerli/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x8441c15195a2c6c7704d8b37291d8a3cd5ef0ce67554a975dd3388c3c163aa66", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 1, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2710210105efdd7632b954d758a43cd9ea112b1333b24a3080e4c86c0ac1f6f7", - "transactionHash": "0x8441c15195a2c6c7704d8b37291d8a3cd5ef0ce67554a975dd3388c3c163aa66", - "logs": [], - "blockNumber": 4035727, - "cumulativeGasUsed": "1762982", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/baseGoerli/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json b/deployments/baseGoerli/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json deleted file mode 100644 index d5d6537f..00000000 --- a/deployments/baseGoerli/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/bsc/.chainId b/deployments/bsc/.chainId deleted file mode 100644 index 2ebc6516..00000000 --- a/deployments/bsc/.chainId +++ /dev/null @@ -1 +0,0 @@ -56 \ No newline at end of file diff --git a/deployments/bsc/KernelFactory.json b/deployments/bsc/KernelFactory.json deleted file mode 100644 index 94a032a2..00000000 --- a/deployments/bsc/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x1996d155cecf7ce4fef4cae9dbbc69ad6a11ccf807d17d7bb9fe3b23b4563442", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 60, - "gasUsed": "3643894", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7848f7cbc5c9bf4a0c6c4560593600bbe9e672c1dd493726ec70674e9ff9e5af", - "transactionHash": "0x1996d155cecf7ce4fef4cae9dbbc69ad6a11ccf807d17d7bb9fe3b23b4563442", - "logs": [], - "blockNumber": 27931519, - "cumulativeGasUsed": "9373259", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/bsc/ZeroDevSessionKeyPlugin.json b/deployments/bsc/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index d40d77b4..00000000 --- a/deployments/bsc/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x53112219e534e41a623afa236976e25b64646934f66d924345e8be166d31f534", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 55, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0156605cb8af3f6350be377c028adc6eda0025e52d2ee34e21503cc1c9b3b534", - "transactionHash": "0x53112219e534e41a623afa236976e25b64646934f66d924345e8be166d31f534", - "logs": [], - "blockNumber": 27931521, - "cumulativeGasUsed": "5705224", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/bsc/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json b/deployments/bsc/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json deleted file mode 100644 index d5d6537f..00000000 --- a/deployments/bsc/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/bscTestnet/.chainId b/deployments/bscTestnet/.chainId deleted file mode 100644 index c4fbb1cf..00000000 --- a/deployments/bscTestnet/.chainId +++ /dev/null @@ -1 +0,0 @@ -97 \ No newline at end of file diff --git a/deployments/bscTestnet/KernelFactory.json b/deployments/bscTestnet/KernelFactory.json deleted file mode 100644 index 1d2dfea6..00000000 --- a/deployments/bscTestnet/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xe062f483e0ab89ea81891b011cd00aac790304f0daa6a3c704073e0b6b9a3b76", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 7, - "gasUsed": "3643894", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6d883639e00b01f598ffbc7b33e383283ecf0e0efc3c5e94a8ff3321c50aa7b2", - "transactionHash": "0xe062f483e0ab89ea81891b011cd00aac790304f0daa6a3c704073e0b6b9a3b76", - "logs": [], - "blockNumber": 29514611, - "cumulativeGasUsed": "4144964", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/bscTestnet/ZeroDevSessionKeyPlugin.json b/deployments/bscTestnet/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 87a4b7b6..00000000 --- a/deployments/bscTestnet/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xa98daaa692b5c605213569431746f4f70fd5ec75037ff33047f4d1ff1a633d2a", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 5, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x54b2ecbca76323ab9ca0d24e2e124ba4589bb1de539880b21e6176b0c90875fd", - "transactionHash": "0xa98daaa692b5c605213569431746f4f70fd5ec75037ff33047f4d1ff1a633d2a", - "logs": [], - "blockNumber": 29514650, - "cumulativeGasUsed": "2009244", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b4f7aa20796f803709c4f0ee7de51b7f", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/bscTestnet/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json b/deployments/bscTestnet/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json deleted file mode 100644 index d5d6537f..00000000 --- a/deployments/bscTestnet/solcInputs/b4f7aa20796f803709c4f0ee7de51b7f.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/ethereum/.chainId b/deployments/ethereum/.chainId deleted file mode 100644 index 56a6051c..00000000 --- a/deployments/ethereum/.chainId +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/deployments/ethereum/KernelFactory.json b/deployments/ethereum/KernelFactory.json deleted file mode 100644 index 416d161e..00000000 --- a/deployments/ethereum/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x93dea01df0e1ee151e42e5561206b8a427ee05756040791009980be4bd474020", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 107, - "gasUsed": "3647178", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x31c1f54016e64df35449cd8269a2076e11b0931834c729357786d051cdd25a59", - "transactionHash": "0x93dea01df0e1ee151e42e5561206b8a427ee05756040791009980be4bd474020", - "logs": [], - "blockNumber": 17089592, - "cumulativeGasUsed": "14629210", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/ethereum/ZeroDevSessionKeyPlugin.json b/deployments/ethereum/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 497e0d0b..00000000 --- a/deployments/ethereum/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x281ba4d20ac0f473407432e05d62263ca2e4456d6c1d96f329f12d619a10ff69", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 129, - "gasUsed": "1716591", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x8f7c97fb14390184ebd72ffd13944655a88b21441d2085a811163902b814d6df", - "transactionHash": "0x281ba4d20ac0f473407432e05d62263ca2e4456d6c1d96f329f12d619a10ff69", - "logs": [], - "blockNumber": 17089647, - "cumulativeGasUsed": "13416706", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/ethereum/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/ethereum/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/ethereum/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/fuji/.chainId b/deployments/fuji/.chainId deleted file mode 100644 index a7350c72..00000000 --- a/deployments/fuji/.chainId +++ /dev/null @@ -1 +0,0 @@ -43113 \ No newline at end of file diff --git a/deployments/fuji/KernelFactory.json b/deployments/fuji/KernelFactory.json deleted file mode 100644 index 6caa6d36..00000000 --- a/deployments/fuji/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x9e85c02f6d7bfacaf570123d036d464795605f27d37009caca483178e05f1753", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 0, - "gasUsed": "3645194", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x59faa1e2b248d9e07cd30b05f1d20f1dd7f44af97150c49fbd3558fb8c85f03f", - "transactionHash": "0x9e85c02f6d7bfacaf570123d036d464795605f27d37009caca483178e05f1753", - "logs": [], - "blockNumber": 21093601, - "cumulativeGasUsed": "3645194", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/fuji/ZeroDevSessionKeyPlugin.json b/deployments/fuji/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 183a7bcc..00000000 --- a/deployments/fuji/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xdc7ad66652932550d057cb917ab3e72384a177ab6b1160c90bc2cf4876910468", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 0, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x31c2c2de7c2d612fc3b2a4aa4a41e0f4f03d48d27d91e2f03ed26483c81ef13c", - "transactionHash": "0xdc7ad66652932550d057cb917ab3e72384a177ab6b1160c90bc2cf4876910468", - "logs": [], - "blockNumber": 21093604, - "cumulativeGasUsed": "1716069", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/fuji/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/fuji/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/fuji/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/goerli/.chainId b/deployments/goerli/.chainId deleted file mode 100644 index 7813681f..00000000 --- a/deployments/goerli/.chainId +++ /dev/null @@ -1 +0,0 @@ -5 \ No newline at end of file diff --git a/deployments/goerli/KernelFactory.json b/deployments/goerli/KernelFactory.json deleted file mode 100644 index 90c48d0a..00000000 --- a/deployments/goerli/KernelFactory.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x3ed20b66444642994e2470949282e526f996f4b3a063351d8cc92b92cb43d307", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 46, - "gasUsed": "3647178", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf50a9dfd9def35ca0d97a7875568a3b452c3d9084cf931290ad4e9ba3fbd669b", - "transactionHash": "0x3ed20b66444642994e2470949282e526f996f4b3a063351d8cc92b92cb43d307", - "logs": [], - "blockNumber": 8831456, - "cumulativeGasUsed": "10705431", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/goerli/ZeroDevSessionKeyPlugin.json b/deployments/goerli/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 10b752e2..00000000 --- a/deployments/goerli/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x41f8c3020c343455613bfa407145b6b4cc90d235764b3aea7ed96191ca7b75d3", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 27, - "gasUsed": "1716591", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2e99579b730324decace81ac5e73d6af456495f99c13131bdaa0ae38ad647714", - "transactionHash": "0x41f8c3020c343455613bfa407145b6b4cc90d235764b3aea7ed96191ca7b75d3", - "logs": [], - "blockNumber": 8831457, - "cumulativeGasUsed": "4285746", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/goerli/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/goerli/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/goerli/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/mumbai/.chainId b/deployments/mumbai/.chainId deleted file mode 100644 index d7e2f72c..00000000 --- a/deployments/mumbai/.chainId +++ /dev/null @@ -1 +0,0 @@ -80001 \ No newline at end of file diff --git a/deployments/mumbai/KernelFactory.json b/deployments/mumbai/KernelFactory.json deleted file mode 100644 index 9454db02..00000000 --- a/deployments/mumbai/KernelFactory.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xcf947450b9693087cbfbe080afd3e2388406334855b716d47591f5d592d6522e", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 0, - "gasUsed": "3645194", - "logsBloom": "0x00000000000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000001000000000000000000000000004000000000000000000041000000000000000000000000000000100000000000000000000000000000000000000000000800000000000000000000000000100000", - "blockHash": "0x32b51a0e5d985bf4d2038b79b0505fe098b973ab31cf677cf42f3e0415c0500a", - "transactionHash": "0xcf947450b9693087cbfbe080afd3e2388406334855b716d47591f5d592d6522e", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 34382565, - "transactionHash": "0xcf947450b9693087cbfbe080afd3e2388406334855b716d47591f5d592d6522e", - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000008d8a9cf53b7d95c148cb159384d249f8fb68db3f", - "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" - ], - "data": "0x000000000000000000000000000000000000000000000000002288c25d50df4c000000000000000000000000000000000000000000000000002c4f5f8db36981000000000000000000000000000000000000000000001db94968cf6b1d2a1d920000000000000000000000000000000000000000000000000009c69d30628a35000000000000000000000000000000000000000000001db9498b582d7a7afcde", - "logIndex": 0, - "blockHash": "0x32b51a0e5d985bf4d2038b79b0505fe098b973ab31cf677cf42f3e0415c0500a" - } - ], - "blockNumber": 34382565, - "cumulativeGasUsed": "3645194", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/mumbai/ZeroDevSessionKeyPlugin.json b/deployments/mumbai/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index 19f91099..00000000 --- a/deployments/mumbai/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x949408c75a94ea3ba9d16f9f47eb1a88fd5b7ec855ef2d233917f8327104e241", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 7, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000008000000000000000000000008000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000080000000000000000000000000000000000000000004000000000000000000041000000000100000000000000000000100000000000000000000000000000000000000000000800000000000000000000000000100000", - "blockHash": "0x934e0c80cf019d6df6fc7b448eb7d0104812ce5c18ffe0c635fd72d377946bfa", - "transactionHash": "0x949408c75a94ea3ba9d16f9f47eb1a88fd5b7ec855ef2d233917f8327104e241", - "logs": [ - { - "transactionIndex": 7, - "blockNumber": 34382609, - "transactionHash": "0x949408c75a94ea3ba9d16f9f47eb1a88fd5b7ec855ef2d233917f8327104e241", - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000008d8a9cf53b7d95c148cb159384d249f8fb68db3f", - "0x0000000000000000000000003a22c8bc68e98b0faf40f349dd2b2890fae01484" - ], - "data": "0x000000000000000000000000000000000000000000000000000fc5279b03ef7500000000000000000000000000000000000000000000000009c0ace7bbe6389f0000000000000000000000000000000000000000000006230aa71fae9528c3ee00000000000000000000000000000000000000000000000009b0e7c020e2492a0000000000000000000000000000000000000000000006230ab6e4d6302cb363", - "logIndex": 15, - "blockHash": "0x934e0c80cf019d6df6fc7b448eb7d0104812ce5c18ffe0c635fd72d377946bfa" - } - ], - "blockNumber": 34382609, - "cumulativeGasUsed": "6936699", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/mumbai/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/mumbai/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/mumbai/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/deployments/polygon/.chainId b/deployments/polygon/.chainId deleted file mode 100644 index 0973804c..00000000 --- a/deployments/polygon/.chainId +++ /dev/null @@ -1 +0,0 @@ -137 \ No newline at end of file diff --git a/deployments/polygon/KernelFactory.json b/deployments/polygon/KernelFactory.json deleted file mode 100644 index 2cd9bcb9..00000000 --- a/deployments/polygon/KernelFactory.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "address": "0x4E4946298614FC299B50c947289F4aD0572CB9ce", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "_entryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "createAccount", - "outputs": [ - { - "internalType": "contract EIP1967Proxy", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAccountAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "kernelTemplate", - "outputs": [ - { - "internalType": "contract Kernel", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xe7132a1f7958c489dca601a1809acb99fca61a74f7854dc41b5c11541a570510", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 33, - "gasUsed": "3645194", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000008000000000000000000000000000000000000000000020000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000008000004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000041000000000000000000000000000000100000000000000000000000000000000000000000000800000000000000000000000000100000", - "blockHash": "0xf689ba7cfe2c01e2a799b589292f2d463acb200bffdc36ad7364adba7b03d694", - "transactionHash": "0xe7132a1f7958c489dca601a1809acb99fca61a74f7854dc41b5c11541a570510", - "logs": [ - { - "transactionIndex": 33, - "blockNumber": 41756612, - "transactionHash": "0xe7132a1f7958c489dca601a1809acb99fca61a74f7854dc41b5c11541a570510", - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000008d8a9cf53b7d95c148cb159384d249f8fb68db3f", - "0x000000000000000000000000b2dd091ea6e591d62f565d7a18ce2a7640add227" - ], - "data": "0x00000000000000000000000000000000000000000000000001848289f538b8000000000000000000000000000000000000000000000000014a5be8bc02a068f90000000000000000000000000000000000000000000005dbd3bbc05dc62a995200000000000000000000000000000000000000000000000148d766320d67b0f90000000000000000000000000000000000000000000005dbd54042e7bb635152", - "logIndex": 118, - "blockHash": "0xf689ba7cfe2c01e2a799b589292f2d463acb200bffdc36ad7364adba7b03d694" - } - ], - "blockNumber": 41756612, - "cumulativeGasUsed": "9713501", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AccountCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract EIP1967Proxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kernelTemplate\",\"outputs\":[{\"internalType\":\"contract Kernel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/KernelFactory.sol\":\"KernelFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/EntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n\\nimport \\\"../interfaces/IAccount.sol\\\";\\nimport \\\"../interfaces/IPaymaster.sol\\\";\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\nimport \\\"../utils/Exec.sol\\\";\\nimport \\\"./StakeManager.sol\\\";\\nimport \\\"./SenderCreator.sol\\\";\\nimport \\\"./Helpers.sol\\\";\\nimport \\\"./NonceManager.sol\\\";\\nimport \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\\n\\n using UserOperationLib for UserOperation;\\n\\n SenderCreator private immutable senderCreator = new SenderCreator();\\n\\n // internal value used during simulation: need to query aggregator.\\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\\n\\n // marker for inner call revert on out of gas\\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\\n\\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\\n\\n /**\\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\\n * in case of signature failure, instead of revert.\\n */\\n uint256 public constant SIG_VALIDATION_FAILED = 1;\\n\\n /**\\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\\n * @param beneficiary the address to receive the fees\\n * @param amount amount to transfer.\\n */\\n function _compensate(address payable beneficiary, uint256 amount) internal {\\n require(beneficiary != address(0), \\\"AA90 invalid beneficiary\\\");\\n (bool success,) = beneficiary.call{value : amount}(\\\"\\\");\\n require(success, \\\"AA91 failed send to beneficiary\\\");\\n }\\n\\n /**\\n * execute a user op\\n * @param opIndex index into the opInfo array\\n * @param userOp the userOp to execute\\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\\n * @return collected the total amount this userOp paid.\\n */\\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\\n uint256 preGas = gasleft();\\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\\n\\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\\n collected = _actualGasCost;\\n } catch {\\n bytes32 innerRevertCode;\\n assembly {\\n returndatacopy(0, 0, 32)\\n innerRevertCode := mload(0)\\n }\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (innerRevertCode == INNER_OUT_OF_GAS) {\\n //report paymaster, since if it is not deliberately caused by the bundler,\\n // it must be a revert caused by paymaster.\\n revert FailedOp(opIndex, \\\"AA95 out of gas\\\");\\n }\\n\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * Execute a batch of UserOperations.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\\n\\n uint256 opslen = ops.length;\\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\\n\\n unchecked {\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[i];\\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\\n }\\n\\n uint256 collected = 0;\\n emit BeforeExecution();\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(i, ops[i], opInfos[i]);\\n }\\n\\n _compensate(beneficiary, collected);\\n } //unchecked\\n }\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) public nonReentrant {\\n\\n uint256 opasLen = opsPerAggregator.length;\\n uint256 totalOps = 0;\\n for (uint256 i = 0; i < opasLen; i++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n //address(1) is special marker of \\\"signature error\\\"\\n require(address(aggregator) != address(1), \\\"AA96 invalid aggregator\\\");\\n\\n if (address(aggregator) != address(0)) {\\n // solhint-disable-next-line no-empty-blocks\\n try aggregator.validateSignatures(ops, opa.signature) {}\\n catch {\\n revert SignatureValidationFailed(address(aggregator));\\n }\\n }\\n\\n totalOps += ops.length;\\n }\\n\\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\\n\\n emit BeforeExecution();\\n\\n uint256 opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n UserOperation[] calldata ops = opa.userOps;\\n IAggregator aggregator = opa.aggregator;\\n\\n uint256 opslen = ops.length;\\n for (uint256 i = 0; i < opslen; i++) {\\n UserOpInfo memory opInfo = opInfos[opIndex];\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\\n opIndex++;\\n }\\n }\\n\\n uint256 collected = 0;\\n opIndex = 0;\\n for (uint256 a = 0; a < opasLen; a++) {\\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\\n emit SignatureAggregatorChanged(address(opa.aggregator));\\n UserOperation[] calldata ops = opa.userOps;\\n uint256 opslen = ops.length;\\n\\n for (uint256 i = 0; i < opslen; i++) {\\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\\n opIndex++;\\n }\\n }\\n emit SignatureAggregatorChanged(address(0));\\n\\n _compensate(beneficiary, collected);\\n }\\n\\n /// @inheritdoc IEntryPoint\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\\n\\n UserOpInfo memory opInfo;\\n _simulationOnlyValidations(op);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n\\n numberMarker();\\n uint256 paid = _executeUserOp(0, op, opInfo);\\n numberMarker();\\n bool targetSuccess;\\n bytes memory targetResult;\\n if (target != address(0)) {\\n (targetSuccess, targetResult) = target.call(targetCallData);\\n }\\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\\n }\\n\\n\\n // A memory copy of UserOp static fields only.\\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\\n struct MemoryUserOp {\\n address sender;\\n uint256 nonce;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n address paymaster;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n }\\n\\n struct UserOpInfo {\\n MemoryUserOp mUserOp;\\n bytes32 userOpHash;\\n uint256 prefund;\\n uint256 contextOffset;\\n uint256 preOpGas;\\n }\\n\\n /**\\n * inner function to handle a UserOperation.\\n * Must be declared \\\"external\\\" to open a call context, but it can only be called by handleOps.\\n */\\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n require(msg.sender == address(this), \\\"AA92 internal call only\\\");\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n\\n uint callGasLimit = mUserOp.callGasLimit;\\n unchecked {\\n // handleOps was called with gas limit too low. abort entire bundle.\\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\\n assembly {\\n mstore(0, INNER_OUT_OF_GAS)\\n revert(0, 32)\\n }\\n }\\n }\\n\\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\\n if (callData.length > 0) {\\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\\n if (!success) {\\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\\n if (result.length > 0) {\\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\\n }\\n mode = IPaymaster.PostOpMode.opReverted;\\n }\\n }\\n\\n unchecked {\\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\\n return _handlePostOp(0, mode, opInfo, context, actualGas);\\n }\\n }\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\\n }\\n\\n /**\\n * copy general fields from userOp into the memory opInfo structure.\\n */\\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\\n mUserOp.sender = userOp.sender;\\n mUserOp.nonce = userOp.nonce;\\n mUserOp.callGasLimit = userOp.callGasLimit;\\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\\n mUserOp.preVerificationGas = userOp.preVerificationGas;\\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes calldata paymasterAndData = userOp.paymasterAndData;\\n if (paymasterAndData.length > 0) {\\n require(paymasterAndData.length >= 20, \\\"AA93 invalid paymasterAndData\\\");\\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\\n } else {\\n mUserOp.paymaster = address(0);\\n }\\n }\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external {\\n UserOpInfo memory outOpInfo;\\n\\n _simulationOnlyValidations(userOp);\\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\\n StakeInfo memory factoryInfo;\\n {\\n bytes calldata initCode = userOp.initCode;\\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\\n factoryInfo = _getStakeInfo(factory);\\n }\\n\\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\\n address aggregator = data.aggregator;\\n bool sigFailed = aggregator == address(1);\\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\\n\\n if (aggregator != address(0) && aggregator != address(1)) {\\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\\n }\\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\\n\\n }\\n\\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\\n unchecked {\\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\\n // our security model might call postOp eventually twice\\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\\n\\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\\n }\\n }\\n\\n // create the sender's contract if needed.\\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\\n if (initCode.length != 0) {\\n address sender = opInfo.mUserOp.sender;\\n if (sender.code.length != 0) revert FailedOp(opIndex, \\\"AA10 sender already constructed\\\");\\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\\n if (sender1 == address(0)) revert FailedOp(opIndex, \\\"AA13 initCode failed or OOG\\\");\\n if (sender1 != sender) revert FailedOp(opIndex, \\\"AA14 initCode must return sender\\\");\\n if (sender1.code.length == 0) revert FailedOp(opIndex, \\\"AA15 initCode must create sender\\\");\\n address factory = address(bytes20(initCode[0 : 20]));\\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\\n }\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes calldata initCode) public {\\n address sender = senderCreator.createSender(initCode);\\n revert SenderAddressResult(sender);\\n }\\n\\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\\n // solhint-disable-next-line no-empty-blocks\\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\\n catch Error(string memory revertReason) {\\n if (bytes(revertReason).length != 0) {\\n revert FailedOp(0, revertReason);\\n }\\n }\\n }\\n\\n /**\\n * Called only during simulation.\\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\\n */\\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\\n if (initCode.length == 0 && sender.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA20 account not deployed\\\");\\n }\\n if (paymasterAndData.length >= 20) {\\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\\n if (paymaster.code.length == 0) {\\n // it would revert anyway. but give a meaningful message\\n revert(\\\"AA30 paymaster not deployed\\\");\\n }\\n }\\n // always revert\\n revert(\\\"\\\");\\n }\\n\\n /**\\n * call account.validateUserOp.\\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\\n * decrement account's deposit if needed\\n */\\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\\n unchecked {\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n address sender = mUserOp.sender;\\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\\n address paymaster = mUserOp.paymaster;\\n numberMarker();\\n uint256 missingAccountFunds = 0;\\n if (paymaster == address(0)) {\\n uint256 bal = balanceOf(sender);\\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\\n }\\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\\n returns (uint256 _validationData) {\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA23 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA23 reverted (or OOG)\\\");\\n }\\n if (paymaster == address(0)) {\\n DepositInfo storage senderInfo = deposits[sender];\\n uint256 deposit = senderInfo.deposit;\\n if (requiredPrefund > deposit) {\\n revert FailedOp(opIndex, \\\"AA21 didn't pay prefund\\\");\\n }\\n senderInfo.deposit = uint112(deposit - requiredPrefund);\\n }\\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\\n }\\n }\\n\\n /**\\n * In case the request has a paymaster:\\n * Validate paymaster has enough deposit.\\n * Call paymaster.validatePaymasterUserOp.\\n * Revert with proper FailedOp in case paymaster reverts.\\n * Decrement paymaster's deposit\\n */\\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\\n internal returns (bytes memory context, uint256 validationData) {\\n unchecked {\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \\\"AA41 too little verificationGas\\\");\\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\\n\\n address paymaster = mUserOp.paymaster;\\n DepositInfo storage paymasterInfo = deposits[paymaster];\\n uint256 deposit = paymasterInfo.deposit;\\n if (deposit < requiredPreFund) {\\n revert FailedOp(opIndex, \\\"AA31 paymaster deposit too low\\\");\\n }\\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\\n context = _context;\\n validationData = _validationData;\\n } catch Error(string memory revertReason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA33 reverted: \\\", revertReason));\\n } catch {\\n revert FailedOp(opIndex, \\\"AA33 reverted (or OOG)\\\");\\n }\\n }\\n }\\n\\n /**\\n * revert if either account validationData or paymaster validationData is expired\\n */\\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\\n if (expectedAggregator != aggregator) {\\n revert FailedOp(opIndex, \\\"AA24 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA22 expired or not due\\\");\\n }\\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\\n address pmAggregator;\\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\\n if (pmAggregator != address(0)) {\\n revert FailedOp(opIndex, \\\"AA34 signature error\\\");\\n }\\n if (outOfTimeRange) {\\n revert FailedOp(opIndex, \\\"AA32 paymaster expired or not due\\\");\\n }\\n }\\n\\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\\n if (validationData == 0) {\\n return (address(0), false);\\n }\\n ValidationData memory data = _parseValidationData(validationData);\\n // solhint-disable-next-line not-rely-on-time\\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\\n aggregator = data.aggregator;\\n }\\n\\n /**\\n * validate account and paymaster (if defined).\\n * also make sure total validation doesn't exceed verificationGasLimit\\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\\n * @param opIndex the index of this userOp into the \\\"opInfos\\\" array\\n * @param userOp the userOp to validate\\n */\\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\n private returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n uint256 preGas = gasleft();\\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n _copyUserOpToMemory(userOp, mUserOp);\\n outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n // and multiplied without causing overflow\\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n require(maxGasValues <= type(uint120).max, \\\"AA94 gas values overflow\\\");\\n\\n uint256 gasUsedByValidateAccountPrepayment;\\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n revert FailedOp(opIndex, \\\"AA25 invalid account nonce\\\");\\n }\\n\\n //a \\\"marker\\\" where account opcode validation is done and paymaster opcode validation is about to start\\n // (used only by off-chain simulateValidation)\\n numberMarker();\\n\\n bytes memory context;\\n if (mUserOp.paymaster != address(0)) {\\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n }\\n unchecked {\\n uint256 gasUsed = preGas - gasleft();\\n\\n if (userOp.verificationGasLimit < gasUsed) {\\n revert FailedOp(opIndex, \\\"AA40 over verificationGasLimit\\\");\\n }\\n outOpInfo.prefund = requiredPreFund;\\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n }\\n }\\n\\n /**\\n * process post-operation.\\n * called just after the callData is executed.\\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\\n * @param opIndex index in the batch\\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\\n * @param opInfo userOp fields and info collected during validation\\n * @param context the context returned in validatePaymasterUserOp\\n * @param actualGas the gas used so far by this user operation\\n */\\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\\n uint256 preGas = gasleft();\\n unchecked {\\n address refundAddress;\\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\\n\\n address paymaster = mUserOp.paymaster;\\n if (paymaster == address(0)) {\\n refundAddress = mUserOp.sender;\\n } else {\\n refundAddress = paymaster;\\n if (context.length > 0) {\\n actualGasCost = actualGas * gasPrice;\\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\\n } else {\\n // solhint-disable-next-line no-empty-blocks\\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\\n catch Error(string memory reason) {\\n revert FailedOp(opIndex, string.concat(\\\"AA50 postOp reverted: \\\", reason));\\n }\\n catch {\\n revert FailedOp(opIndex, \\\"AA50 postOp revert\\\");\\n }\\n }\\n }\\n }\\n actualGas += preGas - gasleft();\\n actualGasCost = actualGas * gasPrice;\\n if (opInfo.prefund < actualGasCost) {\\n revert FailedOp(opIndex, \\\"AA51 prefund below actualGasCost\\\");\\n }\\n uint256 refund = opInfo.prefund - actualGasCost;\\n _incrementDeposit(refundAddress, refund);\\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\\n } // unchecked\\n }\\n\\n /**\\n * the gas price this UserOp agrees to pay.\\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n */\\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\\n assembly {offset := data}\\n }\\n\\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\\n assembly {data := offset}\\n }\\n\\n //place the NUMBER opcode in the code.\\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\\n // account and paymaster.\\n function numberMarker() internal view {\\n assembly {mstore(0, number())}\\n }\\n}\\n\\n\",\"keccak256\":\"0x04f86318b47f052d7308795ffae6ecec0d023d2458b4e17751b89a0e4acfcdc6\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/NonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IEntryPoint.sol\\\";\\n\\n/**\\n * nonce management functionality\\n */\\ncontract NonceManager is INonceManager {\\n\\n /**\\n * The next valid sequence number for a given nonce key.\\n */\\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\\n\\n function getNonce(address sender, uint192 key)\\n public view override returns (uint256 nonce) {\\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\\n }\\n\\n // allow an account to manually increment its own nonce.\\n // (mainly so that during construction nonce can be made non-zero,\\n // to \\\"absorb\\\" the gas cost of first nonce increment to 1st transaction (construction),\\n // not to 2nd transaction)\\n function incrementNonce(uint192 key) public override {\\n nonceSequenceNumber[msg.sender][key]++;\\n }\\n\\n /**\\n * validate nonce uniqueness for this account.\\n * called just after validateUserOp()\\n */\\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\\n\\n uint192 key = uint192(nonce >> 64);\\n uint64 seq = uint64(nonce);\\n return nonceSequenceNumber[sender][key]++ == seq;\\n }\\n\\n}\\n\",\"keccak256\":\"0xa17a4a6fde70088ab18ffe6df830f3efa31f1cd0e1a7160336c96e3c94984d25\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/SenderCreator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/**\\n * helper contract for EntryPoint, to call userOp.initCode from a \\\"neutral\\\" address,\\n * which is explicitly not the entryPoint itself.\\n */\\ncontract SenderCreator {\\n\\n /**\\n * call the \\\"initCode\\\" factory to create and return the sender account address\\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\\n * @return sender the returned address of the created account, or zero address on failure.\\n */\\n function createSender(bytes calldata initCode) external returns (address sender) {\\n address factory = address(bytes20(initCode[0 : 20]));\\n bytes memory initCallData = initCode[20 :];\\n bool success;\\n /* solhint-disable no-inline-assembly */\\n assembly {\\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\\n sender := mload(0)\\n }\\n if (!success) {\\n sender = address(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x44b9449fec82d6cdfb01d52fdd5a72f90099c651316123810cf9633f00b018c2\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/core/StakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\nimport \\\"../interfaces/IStakeManager.sol\\\";\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable not-rely-on-time */\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by a paymaster.\\n */\\nabstract contract StakeManager is IStakeManager {\\n\\n /// maps paymaster to their deposits and stakes\\n mapping(address => DepositInfo) public deposits;\\n\\n /// @inheritdoc IStakeManager\\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\\n return deposits[account];\\n }\\n\\n // internal method to return just the stake info\\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\\n DepositInfo storage depositInfo = deposits[addr];\\n info.stake = depositInfo.stake;\\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\\n }\\n\\n /// return the deposit (for gas payment) of the account\\n function balanceOf(address account) public view returns (uint256) {\\n return deposits[account].deposit;\\n }\\n\\n receive() external payable {\\n depositTo(msg.sender);\\n }\\n\\n function _incrementDeposit(address account, uint256 amount) internal {\\n DepositInfo storage info = deposits[account];\\n uint256 newAmount = info.deposit + amount;\\n require(newAmount <= type(uint112).max, \\\"deposit overflow\\\");\\n info.deposit = uint112(newAmount);\\n }\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) public payable {\\n _incrementDeposit(account, msg.value);\\n DepositInfo storage info = deposits[account];\\n emit Deposited(account, info.deposit);\\n }\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 unstakeDelaySec) public payable {\\n DepositInfo storage info = deposits[msg.sender];\\n require(unstakeDelaySec > 0, \\\"must specify unstake delay\\\");\\n require(unstakeDelaySec >= info.unstakeDelaySec, \\\"cannot decrease unstake time\\\");\\n uint256 stake = info.stake + msg.value;\\n require(stake > 0, \\\"no stake specified\\\");\\n require(stake <= type(uint112).max, \\\"stake overflow\\\");\\n deposits[msg.sender] = DepositInfo(\\n info.deposit,\\n true,\\n uint112(stake),\\n unstakeDelaySec,\\n 0\\n );\\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\\n }\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(info.unstakeDelaySec != 0, \\\"not staked\\\");\\n require(info.staked, \\\"already unstaking\\\");\\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\\n info.withdrawTime = withdrawTime;\\n info.staked = false;\\n emit StakeUnlocked(msg.sender, withdrawTime);\\n }\\n\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external {\\n DepositInfo storage info = deposits[msg.sender];\\n uint256 stake = info.stake;\\n require(stake > 0, \\\"No stake to withdraw\\\");\\n require(info.withdrawTime > 0, \\\"must call unlockStake() first\\\");\\n require(info.withdrawTime <= block.timestamp, \\\"Stake withdrawal is not due\\\");\\n info.unstakeDelaySec = 0;\\n info.withdrawTime = 0;\\n info.stake = 0;\\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\\n (bool success,) = withdrawAddress.call{value : stake}(\\\"\\\");\\n require(success, \\\"failed to withdraw stake\\\");\\n }\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\\n DepositInfo storage info = deposits[msg.sender];\\n require(withdrawAmount <= info.deposit, \\\"Withdraw amount too large\\\");\\n info.deposit = uint112(info.deposit - withdrawAmount);\\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\\\"\\\");\\n require(success, \\\"failed to withdraw\\\");\\n }\\n}\\n\",\"keccak256\":\"0x21aa0956382bd000b1b8c3b1d19ca6ebcd6c9029eebb19c612fb38ee5dd2430a\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\\n */\\ninterface IPaymaster {\\n\\n enum PostOpMode {\\n opSucceeded, // user op succeeded\\n opReverted, // user op reverted. still has to pay for gas.\\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\\n }\\n\\n /**\\n * payment validation: check if paymaster agrees to pay.\\n * Must verify sender is the entryPoint.\\n * Revert to reject this request.\\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\n * @param userOp the user operation\\n * @param userOpHash hash of the user's request data.\\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\n * @return context value to send to a postOp\\n * zero length to signify postOp is not required.\\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\\n external returns (bytes memory context, uint256 validationData);\\n\\n /**\\n * post-operation handler.\\n * Must verify sender is the entryPoint\\n * @param mode enum with the following options:\\n * opSucceeded - user operation succeeded.\\n * opReverted - user op reverted. still has to pay for gas.\\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\\n * Now this is the 2nd call, after user's op was deliberately reverted.\\n * @param context - the context value returned by validatePaymasterUserOp\\n * @param actualGasCost - actual gas used so far (without this postOp call).\\n */\\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\\n}\\n\",\"keccak256\":\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n\\n function call(\\n address to,\\n uint256 value,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function staticcall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal view returns (bool success) {\\n assembly {\\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n function delegateCall(\\n address to,\\n bytes memory data,\\n uint256 txGas\\n ) internal returns (bool success) {\\n assembly {\\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n }\\n }\\n\\n // get returned data from last call or calldelegate\\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\\n assembly {\\n let len := returndatasize()\\n if gt(len, maxLen) {\\n len := maxLen\\n }\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n // revert with explicit byte array (probably reverted info from call)\\n function revertWithData(bytes memory returnData) internal pure {\\n assembly {\\n revert(add(returnData, 32), mload(returnData))\\n }\\n }\\n\\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\\n bool success = call(to,0,data,gasleft());\\n if (!success) {\\n revertWithData(getReturnData(maxLen));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5b232117afbc2939f3ffc92745614867e9e1d475a3e1e5443adae13c200174f1\",\"license\":\"LGPL-3.0-only\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n /**\\n * @dev Deploys a contract using `CREATE2`. The address where the contract\\n * will be deployed can be known in advance via {computeAddress}.\\n *\\n * The bytecode for a contract can be obtained from Solidity with\\n * `type(contractName).creationCode`.\\n *\\n * Requirements:\\n *\\n * - `bytecode` must not be empty.\\n * - `salt` must have not been used for `bytecode` already.\\n * - the factory must have a balance of at least `amount`.\\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n */\\n function deploy(\\n uint256 amount,\\n bytes32 salt,\\n bytes memory bytecode\\n ) internal returns (address addr) {\\n require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n /// @solidity memory-safe-assembly\\n assembly {\\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n }\\n require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n * `bytecodeHash` or `salt` will result in a new destination address.\\n */\\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n return computeAddress(salt, bytecodeHash, address(this));\\n }\\n\\n /**\\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n */\\n function computeAddress(\\n bytes32 salt,\\n bytes32 bytecodeHash,\\n address deployer\\n ) internal pure returns (address addr) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40) // Get free memory pointer\\n\\n // | | \\u2193 ptr ... \\u2193 ptr + 0x0B (start) ... \\u2193 ptr + 0x20 ... \\u2193 ptr + 0x40 ... |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\\n // | salt | BBBBBBBBBBBBB...BB |\\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\\n // | 0xFF | FF |\\n // |-------------------|---------------------------------------------------------------------------|\\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\\n // | keccak(start, 85) | \\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191\\u2191 |\\n\\n mstore(add(ptr, 0x40), bytecodeHash)\\n mstore(add(ptr, 0x20), salt)\\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\\n mstore8(start, 0xff)\\n addr := keccak256(start, 85)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/Kernel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"./plugin/IPlugin.sol\\\";\\nimport \\\"account-abstraction/core/Helpers.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport {EntryPoint} from \\\"account-abstraction/core/EntryPoint.sol\\\";\\nimport \\\"./utils/Exec.sol\\\";\\nimport \\\"./abstract/Compatibility.sol\\\";\\nimport \\\"./abstract/KernelStorage.sol\\\";\\n\\n/// @title Kernel\\n/// @author taek\\n/// @notice wallet kernel for minimal wallet functionality\\n/// @dev supports only 1 owner, multiple plugins\\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\\n error InvalidNonce();\\n error InvalidSignatureLength();\\n error QueryResult(bytes result);\\n\\n string public constant name = \\\"Kernel\\\";\\n\\n string public constant version = \\\"0.0.1\\\";\\n\\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\\n\\n /// @notice initialize wallet kernel\\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\\n /// @param _owner owner address\\n function initialize(address _owner) external {\\n WalletKernelStorage storage ws = getKernelStorage();\\n require(ws.owner == address(0), \\\"account: already initialized\\\");\\n ws.owner = _owner;\\n }\\n\\n /// @notice Query plugin for data\\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\\n /// @param _plugin Plugin address\\n /// @param _data Data to query\\n function queryPlugin(address _plugin, bytes calldata _data) external {\\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\\n if (success) {\\n revert QueryResult(_ret);\\n } else {\\n assembly {\\n revert(add(_ret, 32), mload(_ret))\\n }\\n }\\n }\\n\\n /// @notice execute function call to external contract\\n /// @dev this function will execute function call to external contract\\n /// @param to target contract address\\n /// @param value value to be sent\\n /// @param data data to be sent\\n /// @param operation operation type (call or delegatecall)\\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\\n \\\"account: not from entrypoint or owner\\\"\\n );\\n bool success;\\n bytes memory ret;\\n if (operation == Operation.DelegateCall) {\\n (success, ret) = Exec.delegateCall(to, data);\\n } else {\\n (success, ret) = Exec.call(to, value, data);\\n }\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n }\\n\\n /// @notice validate user operation\\n /// @dev this function will validate user operation and be called by EntryPoint\\n /// @param userOp user operation\\n /// @param userOpHash user operation hash\\n /// @param missingAccountFunds funds needed to be reimbursed\\n /// @return validationData validation data\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (uint256 validationData)\\n {\\n require(msg.sender == address(entryPoint), \\\"account: not from entryPoint\\\");\\n if (userOp.signature.length == 65) {\\n validationData = _validateUserOp(userOp, userOpHash);\\n } else if (userOp.signature.length > 97) {\\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\\n address plugin = address(bytes20(userOp.signature[0:20]));\\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\\n bytes memory signature = userOp.signature[32:97];\\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\n \\\"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\\\"\\n ), // we are going to trust plugin for verification\\n plugin,\\n validUntil,\\n validAfter,\\n keccak256(data)\\n )\\n )\\n );\\n\\n address signer = ECDSA.recover(digest, signature);\\n if (getKernelStorage().owner != signer) {\\n return SIG_VALIDATION_FAILED;\\n }\\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\\n bool res = abi.decode(ret, (bool));\\n if (!res) {\\n return SIG_VALIDATION_FAILED;\\n }\\n validationData = _packValidationData(!res, validUntil, validAfter);\\n } else {\\n revert InvalidSignatureLength();\\n }\\n if (missingAccountFunds > 0) {\\n // we are going to assume signature is valid at this point\\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\\\"\\\");\\n (success);\\n return validationData;\\n }\\n }\\n\\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\\n internal\\n view\\n returns (uint256 validationData)\\n {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\\n return validationData;\\n }\\n\\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\\n address recovered = ECDSA.recover(hash, userOp.signature);\\n if (ws.owner != recovered) {\\n return SIG_VALIDATION_FAILED;\\n }\\n }\\n\\n /**\\n * delegate the contract call to the plugin\\n */\\n function _delegateToPlugin(\\n address plugin,\\n UserOperation calldata userOp,\\n bytes32 opHash,\\n uint256 missingAccountFunds\\n ) internal returns (bytes memory) {\\n bytes memory data =\\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\\n if (!success) {\\n assembly {\\n revert(add(ret, 32), mload(ret))\\n }\\n }\\n return ret;\\n }\\n\\n /// @notice validate signature using eip1271\\n /// @dev this function will validate signature using eip1271\\n /// @param _hash hash to be signed\\n /// @param _signature signature\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\\n WalletKernelStorage storage ws = getKernelStorage();\\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\\n return 0x1626ba7e;\\n }\\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\\n address recovered = ECDSA.recover(hash, _signature);\\n // Validate signatures\\n if (ws.owner == recovered) {\\n return 0x1626ba7e;\\n } else {\\n return 0xffffffff;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee1651f7212298696da5a773709d0a33ee272ae8c06e31824655e71a2228ae25\",\"license\":\"MIT\"},\"src/KernelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/Create2.sol\\\";\\nimport \\\"./factory/EIP1967Proxy.sol\\\";\\nimport \\\"./Kernel.sol\\\";\\n\\ncontract KernelFactory {\\n Kernel public immutable kernelTemplate;\\n\\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\\n\\n constructor(IEntryPoint _entryPoint) {\\n kernelTemplate = new Kernel(_entryPoint);\\n }\\n\\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n address addr = Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n if (addr.code.length > 0) {\\n return EIP1967Proxy(payable(addr));\\n }\\n proxy =\\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\\n emit AccountCreated(address(proxy), _owner, _index);\\n }\\n\\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\\n return Create2.computeAddress(\\n salt,\\n keccak256(\\n abi.encodePacked(\\n type(EIP1967Proxy).creationCode,\\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x53a5dbafaf7d000de850be785d4c2d883980acf1772d231b510c122640ccf789\",\"license\":\"MIT\"},\"src/abstract/Compatibility.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Compatibility {\\n receive() external payable {}\\n\\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n\\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\\n external\\n pure\\n returns (bytes4)\\n {\\n return this.onERC1155BatchReceived.selector;\\n }\\n\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x0d4634886db9ce6c2321db3a9bbbe0883cffe654cbce75dcfc9df1ec7eedb0b8\",\"license\":\"MIT\"},\"src/abstract/KernelStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\n\\nstruct WalletKernelStorage {\\n address owner;\\n}\\n\\ncontract KernelStorage {\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n IEntryPoint public immutable entryPoint;\\n\\n event Upgraded(address indexed newImplementation);\\n\\n // modifier for checking if the sender is the entrypoint or\\n // the account itself\\n modifier onlyFromEntryPointOrOwnerOrSelf() {\\n require(\\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\\n \\\"account: not from entrypoint or owner or self\\\"\\n );\\n _;\\n }\\n\\n constructor(IEntryPoint _entryPoint) {\\n entryPoint = _entryPoint;\\n getKernelStorage().owner = address(1);\\n }\\n /// @notice get wallet kernel storage\\n /// @dev used to get wallet kernel storage\\n /// @return ws wallet kernel storage, consists of owner and nonces\\n\\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\\n bytes32 storagePosition = bytes32(uint256(keccak256(\\\"zerodev.kernel\\\")) - 1);\\n assembly {\\n ws.slot := storagePosition\\n }\\n }\\n\\n function getOwner() external view returns (address) {\\n return getKernelStorage().owner;\\n }\\n\\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n assembly {\\n sstore(slot, _newImplementation)\\n }\\n emit Upgraded(_newImplementation);\\n }\\n\\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\\n getKernelStorage().owner = _newOwner;\\n }\\n\\n function getNonce() public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), 0);\\n }\\n\\n function getNonce(uint192 key) public view virtual returns (uint256) {\\n return entryPoint.getNonce(address(this), key);\\n }\\n}\\n \",\"keccak256\":\"0xe4512794b67794cf90eba665aee57b75efa60f2aacd1cc45eb17d3f3b255008c\",\"license\":\"MIT\"},\"src/factory/EIP1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract EIP1967Proxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n constructor(address _logic, bytes memory _data) payable {\\n require(_logic != address(0), \\\"EIP1967Proxy: implementation is the zero address\\\");\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n sstore(slot, _logic)\\n }\\n if (_data.length > 0) {\\n (bool success,) = _logic.delegatecall(_data);\\n require(success, \\\"EIP1967Proxy: constructor call failed\\\");\\n }\\n }\\n\\n fallback() external payable {\\n address implementation = _implementation();\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbec8942c8258db6379a08dcb3b0a4aa0ee585972f26eba258c35ece87972d78b\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/utils/Exec.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.5 <0.9.0;\\n\\n// solhint-disable no-inline-assembly\\n\\nenum Operation {\\n Call,\\n DelegateCall\\n}\\n\\n/**\\n * Utility functions helpful when making different kinds of contract calls in Solidity.\\n */\\nlibrary Exec {\\n function call(address to, uint256 value, bytes memory data)\\n internal\\n returns (bool success, bytes memory returnData)\\n {\\n assembly {\\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\\n assembly {\\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n\\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\\n assembly {\\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\\n let len := returndatasize()\\n let ptr := mload(0x40)\\n mstore(0x40, add(ptr, add(len, 0x20)))\\n mstore(ptr, len)\\n returndatacopy(add(ptr, 0x20), 0, len)\\n returnData := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1eef311d5073ff7f02b44311ae4d5c53f619ea19f1a059b8d17c028d141c2893\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", - "bytecode": "0x60a06040523480156200001157600080fd5b506040516200466d3803806200466d833981810160405281019062000037919062000136565b806040516200004690620000aa565b620000529190620001d3565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001f0565b613527806200114683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b6000620000fe82620000dd565b9050919050565b6200011081620000f1565b81146200011c57600080fd5b50565b600081519050620001308162000105565b92915050565b6000602082840312156200014f576200014e620000b8565b5b60006200015f848285016200011f565b91505092915050565b6000819050919050565b6000620001936200018d6200018784620000bd565b62000168565b620000bd565b9050919050565b6000620001a78262000172565b9050919050565b6000620001bb826200019a565b9050919050565b620001cd81620001ae565b82525050565b6000602082019050620001ea6000830184620001c2565b92915050565b608051610f26620002206000396000818160db0152818161015a0152818161028a01526103830152610f266000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c634300081200336101606040523480156200001257600080fd5b5060405162003527380380620035278339818101604052810190620000389190620002e2565b806040518060400160405280600681526020017f4b65726e656c00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200010e818484620001e760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff168152505060016200019e6200022360201b60201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000422565b60008383834630604051602001620002049594939291906200035b565b6040516020818303038152906040528051906020012090509392505050565b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c620002589190620003e7565b60001b90508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002968262000269565b9050919050565b6000620002aa8262000289565b9050919050565b620002bc816200029d565b8114620002c857600080fd5b50565b600081519050620002dc81620002b1565b92915050565b600060208284031215620002fb57620002fa62000264565b5b60006200030b84828501620002cb565b91505092915050565b6000819050919050565b620003298162000314565b82525050565b6000819050919050565b62000344816200032f565b82525050565b620003558162000289565b82525050565b600060a0820190506200037260008301886200031e565b6200038160208301876200031e565b6200039060408301866200031e565b6200039f606083018562000339565b620003ae60808301846200034a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003f4826200032f565b915062000401836200032f565b92508282039050818111156200041c576200041b620003b8565b5b92915050565b60805160a05160c05160e051610100516101205161014051613080620004a76000396000818161057a0152818161071301528181610b1501528181610c2401528181610e0b01528181610f2f0152610fe701526000611800015260006118420152600061182101526000611756015260006117ac015260006117d501526130806000f3fe6080604052600436106100f75760003560e01c8063940d3c601161008a578063d087d28811610059578063d087d2881461035b578063f23a6e6114610386578063f2fde38b146103c3578063f333df55146103ec576100fe565b8063940d3c60146102a1578063b0d691fe146102ca578063bc197c81146102f5578063c4d66de814610332576100fe565b80633a871cdd116100c65780633a871cdd146101d15780633e1b08121461020e57806354fd4d501461024b578063893d20e814610276576100fe565b806306fdde0314610103578063150b7a021461012e5780631626ba7e1461016b5780633659cfe6146101a8576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b50610118610415565b6040516101259190611a4b565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611b7a565b61044e565b6040516101629190611c3d565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611dbe565b610463565b60405161019f9190611c3d565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca9190611e1a565b610578565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611e6c565b61070f565b6040516102059190611eea565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190611f55565b610b11565b6040516102429190611eea565b60405180910390f35b34801561025757600080fd5b50610260610bb6565b60405161026d9190611a4b565b60405180910390f35b34801561028257600080fd5b5061028b610bef565b6040516102989190611f91565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190611fd1565b610c22565b005b3480156102d657600080fd5b506102df610e09565b6040516102ec91906120b8565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190612129565b610e2d565b6040516103299190611c3d565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611e1a565b610e45565b005b34801561036757600080fd5b50610370610f2b565b60405161037d9190611eea565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612205565b610fcf565b6040516103ba9190611c3d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611e1a565b610fe5565b005b3480156103f857600080fd5b50610413600480360381019061040e919061229f565b611157565b005b6040518060400160405280600681526020017f4b65726e656c000000000000000000000000000000000000000000000000000081525081565b600063150b7a0260e01b905095945050505050565b60008061046e6111f7565b905061047a8484611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104e057631626ba7e60e01b915050610572565b60006104eb8561125d565b905060006104f98286611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361056457631626ba7e60e01b9350505050610572565b63ffffffff60e01b93505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061062857506105d56111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061065e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069490612371565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181558173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906123dd565b60405180910390fd5b6041848061014001906107b2919061240c565b9050036107ca576107c3848461128d565b9050610a8e565b6061848061014001906107dd919061240c565b90501115610a5b576000848061014001906107f8919061240c565b60009060149261080a93929190612479565b9061081591906124f8565b60601c905060008580610140019061082d919061240c565b601490601a9261083f93929190612479565b9061084a9190612583565b60d01c9050600086806101400190610862919061240c565b601a9060209261087493929190612479565b9061087f9190612583565b60d01c9050600087806101400190610897919061240c565b6020906061926108a993929190612479565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600088806101400190610901919061240c565b606190809261091293929190612479565b81019061091f91906125e2565b50905060006109827f4584533bad8bbd8aa77024a548a56acb8d2807847381ce1b3364745ca396b2e3878787868051906020012060405160200161096795949392919061268a565b6040516020818303038152906040528051906020012061142e565b905060006109908285611236565b90508073ffffffffffffffffffffffffffffffffffffffff166109b16111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a00576001975050505050505050610b0a565b6000610a0e888d8d8d611448565b9050600081806020019051810190610a269190612715565b905080610a3f5760019950505050505050505050610b0a565b610a4b811589896114f4565b9950505050505050505050610a8d565b6040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000821115610b095760003373ffffffffffffffffffffffffffffffffffffffff1683604051610abd90612773565b60006040518083038185875af1925050503d8060008114610afa576040519150601f19603f3d011682016040523d82523d6000602084013e610aff565b606091505b5050905050610b0a565b5b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a30846040518363ffffffff1660e01b8152600401610b6e929190612797565b602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906127d5565b9050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000610bf96111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cd25750610c7f6111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612874565b60405180910390fd5b60006060600180811115610d2857610d27612894565b5b836001811115610d3b57610d3a612894565b5b03610d9b57610d8e8786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b8092508193505050610df3565b610dea878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611563565b80925081935050505b81610e0057805160208201fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063bc197c8160e01b905098975050505050505050565b6000610e4f6111f7565b9050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061290f565b60405180910390fd5b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401610f8992919061296a565b602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906127d5565b905090565b600063f23a6e6160e01b90509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109557506110426111f7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110cb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190612371565b60405180910390fd5b806111136111f7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111a88585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061152d565b9150915081156111ef57806040517fa52b21690000000000000000000000000000000000000000000000000000000081526004016111e691906129e8565b60405180910390fd5b805160208201fd5b60008060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd960001c61122a9190612a39565b60001b90508091505090565b6000806000611245858561159b565b91509150611252816115ec565b819250505092915050565b6000816040516020016112709190612ae5565b604051602081830303815290604052805190602001209050919050565b6000806112986111f7565b90506112f783858061014001906112af919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113535750611428565b600061135e8461125d565b905060006113bf8287806101400190611377919061240c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611236565b90508073ffffffffffffffffffffffffffffffffffffffff168360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114245760019350505050611428565b5050505b92915050565b600061144161143b611752565b8361186c565b9050919050565b60606000639e2045ce60e01b85858560405160240161146993929190612d6b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806114d5888461152d565b91509150816114e657805160208201fd5b809350505050949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561151c57600061151f565b60015b60ff16171790509392505050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60008060418351036115dc5760008060006020860151925060408601519150606086015160001a90506115d08782858561189f565b945094505050506115e5565b60006002915091505b9250929050565b60006004811115611600576115ff612894565b5b81600481111561161357611612612894565b5b031561174f576001600481111561162d5761162c612894565b5b8160048111156116405761163f612894565b5b03611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790612df5565b60405180910390fd5b6002600481111561169457611693612894565b5b8160048111156116a7576116a6612894565b5b036116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90612e61565b60405180910390fd5b600360048111156116fb576116fa612894565b5b81600481111561170e5761170d612894565b5b0361174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590612ef3565b60405180910390fd5b5b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117ce57507f000000000000000000000000000000000000000000000000000000000000000046145b156117fb577f00000000000000000000000000000000000000000000000000000000000000009050611869565b6118667f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611981565b90505b90565b60008282604051602001611881929190612f5f565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156118da576000600391509150611978565b6000600187878787604051600081526020016040526040516118ff9493929190612fb2565b6020604051602081039080840390855afa158015611921573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196f57600060019250925050611978565b80600092509250505b94509492505050565b6000838383463060405160200161199c959493929190612ff7565b6040516020818303038152906040528051906020012090509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119f55780820151818401526020810190506119da565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a1d826119bb565b611a2781856119c6565b9350611a378185602086016119d7565b611a4081611a01565b840191505092915050565b60006020820190508181036000830152611a658184611a12565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aac82611a81565b9050919050565b611abc81611aa1565b8114611ac757600080fd5b50565b600081359050611ad981611ab3565b92915050565b6000819050919050565b611af281611adf565b8114611afd57600080fd5b50565b600081359050611b0f81611ae9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3a57611b39611b15565b5b8235905067ffffffffffffffff811115611b5757611b56611b1a565b5b602083019150836001820283011115611b7357611b72611b1f565b5b9250929050565b600080600080600060808688031215611b9657611b95611a77565b5b6000611ba488828901611aca565b9550506020611bb588828901611aca565b9450506040611bc688828901611b00565b935050606086013567ffffffffffffffff811115611be757611be6611a7c565b5b611bf388828901611b24565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c3781611c02565b82525050565b6000602082019050611c526000830184611c2e565b92915050565b6000819050919050565b611c6b81611c58565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccb82611a01565b810181811067ffffffffffffffff82111715611cea57611ce9611c93565b5b80604052505050565b6000611cfd611a6d565b9050611d098282611cc2565b919050565b600067ffffffffffffffff821115611d2957611d28611c93565b5b611d3282611a01565b9050602081019050919050565b82818337600083830152505050565b6000611d61611d5c84611d0e565b611cf3565b905082815260208101848484011115611d7d57611d7c611c8e565b5b611d88848285611d3f565b509392505050565b600082601f830112611da557611da4611b15565b5b8135611db5848260208601611d4e565b91505092915050565b60008060408385031215611dd557611dd4611a77565b5b6000611de385828601611c79565b925050602083013567ffffffffffffffff811115611e0457611e03611a7c565b5b611e1085828601611d90565b9150509250929050565b600060208284031215611e3057611e2f611a77565b5b6000611e3e84828501611aca565b91505092915050565b600080fd5b60006101608284031215611e6357611e62611e47565b5b81905092915050565b600080600060608486031215611e8557611e84611a77565b5b600084013567ffffffffffffffff811115611ea357611ea2611a7c565b5b611eaf86828701611e4c565b9350506020611ec086828701611c79565b9250506040611ed186828701611b00565b9150509250925092565b611ee481611adf565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b611f3281611f05565b8114611f3d57600080fd5b50565b600081359050611f4f81611f29565b92915050565b600060208284031215611f6b57611f6a611a77565b5b6000611f7984828501611f40565b91505092915050565b611f8b81611aa1565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b60028110611fb957600080fd5b50565b600081359050611fcb81611fac565b92915050565b600080600080600060808688031215611fed57611fec611a77565b5b6000611ffb88828901611aca565b955050602061200c88828901611b00565b945050604086013567ffffffffffffffff81111561202d5761202c611a7c565b5b61203988828901611b24565b9350935050606061204c88828901611fbc565b9150509295509295909350565b6000819050919050565b600061207e61207961207484611a81565b612059565b611a81565b9050919050565b600061209082612063565b9050919050565b60006120a282612085565b9050919050565b6120b281612097565b82525050565b60006020820190506120cd60008301846120a9565b92915050565b60008083601f8401126120e9576120e8611b15565b5b8235905067ffffffffffffffff81111561210657612105611b1a565b5b60208301915083602082028301111561212257612121611b1f565b5b9250929050565b60008060008060008060008060a0898b03121561214957612148611a77565b5b60006121578b828c01611aca565b98505060206121688b828c01611aca565b975050604089013567ffffffffffffffff81111561218957612188611a7c565b5b6121958b828c016120d3565b9650965050606089013567ffffffffffffffff8111156121b8576121b7611a7c565b5b6121c48b828c016120d3565b9450945050608089013567ffffffffffffffff8111156121e7576121e6611a7c565b5b6121f38b828c01611b24565b92509250509295985092959890939650565b60008060008060008060a0878903121561222257612221611a77565b5b600061223089828a01611aca565b965050602061224189828a01611aca565b955050604061225289828a01611b00565b945050606061226389828a01611b00565b935050608087013567ffffffffffffffff81111561228457612283611a7c565b5b61229089828a01611b24565b92509250509295509295509295565b6000806000604084860312156122b8576122b7611a77565b5b60006122c686828701611aca565b935050602084013567ffffffffffffffff8111156122e7576122e6611a7c565b5b6122f386828701611b24565b92509250509250925092565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572206f722073656c6600000000000000000000000000000000000000602082015250565b600061235b602d836119c6565b9150612366826122ff565b604082019050919050565b6000602082019050818103600083015261238a8161234e565b9050919050565b7f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000600082015250565b60006123c7601c836119c6565b91506123d282612391565b602082019050919050565b600060208201905081810360008301526123f6816123ba565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612429576124286123fd565b5b80840192508235915067ffffffffffffffff82111561244b5761244a612402565b5b60208301925060018202360383131561246757612466612407565b5b509250929050565b600080fd5b600080fd5b6000808585111561248d5761248c61246f565b5b8386111561249e5761249d612474565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061250483836124b4565b8261250f81356124bf565b9250601482101561254f5761254a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026124eb565b831692505b505092915050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b600061258f83836124b4565b8261259a8135612557565b925060068210156125da576125d57fffffffffffff0000000000000000000000000000000000000000000000000000836006036008026124eb565b831692505b505092915050565b600080604083850312156125f9576125f8611a77565b5b600083013567ffffffffffffffff81111561261757612616611a7c565b5b61262385828601611d90565b925050602083013567ffffffffffffffff81111561264457612643611a7c565b5b61265085828601611d90565b9150509250929050565b61266381611c58565b82525050565b600065ffffffffffff82169050919050565b61268481612669565b82525050565b600060a08201905061269f600083018861265a565b6126ac6020830187611f82565b6126b9604083018661267b565b6126c6606083018561267b565b6126d3608083018461265a565b9695505050505050565b60008115159050919050565b6126f2816126dd565b81146126fd57600080fd5b50565b60008151905061270f816126e9565b92915050565b60006020828403121561272b5761272a611a77565b5b600061273984828501612700565b91505092915050565b600081905092915050565b50565b600061275d600083612742565b91506127688261274d565b600082019050919050565b600061277e82612750565b9150819050919050565b61279181611f05565b82525050565b60006040820190506127ac6000830185611f82565b6127b96020830184612788565b9392505050565b6000815190506127cf81611ae9565b92915050565b6000602082840312156127eb576127ea611a77565b5b60006127f9848285016127c0565b91505092915050565b7f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061285e6025836119c6565b915061286982612802565b604082019050919050565b6000602082019050818103600083015261288d81612851565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f6163636f756e743a20616c726561647920696e697469616c697a656400000000600082015250565b60006128f9601c836119c6565b9150612904826128c3565b602082019050919050565b60006020820190508181036000830152612928816128ec565b9050919050565b6000819050919050565b600061295461294f61294a8461292f565b612059565b611f05565b9050919050565b61296481612939565b82525050565b600060408201905061297f6000830185611f82565b61298c602083018461295b565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006129ba82612993565b6129c4818561299e565b93506129d48185602086016119d7565b6129dd81611a01565b840191505092915050565b60006020820190508181036000830152612a0281846129af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a4482611adf565b9150612a4f83611adf565b9250828203905081811115612a6757612a66612a0a565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612aae601c83612a6d565b9150612ab982612a78565b601c82019050919050565b6000819050919050565b612adf612ada82611c58565b612ac4565b82525050565b6000612af082612aa1565b9150612afc8284612ace565b60208201915081905092915050565b6000612b1a6020840184611aca565b905092915050565b612b2b81611aa1565b82525050565b6000612b406020840184611b00565b905092915050565b612b5181611adf565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b8357612b82612b61565b5b83810192508235915060208301925067ffffffffffffffff821115612bab57612baa612b57565b5b600182023603831315612bc157612bc0612b5c565b5b509250929050565b600082825260208201905092915050565b6000612be68385612bc9565b9350612bf3838584611d3f565b612bfc83611a01565b840190509392505050565b60006101608301612c1b6000840184612b0b565b612c286000860182612b22565b50612c366020840184612b31565b612c436020860182612b48565b50612c516040840184612b66565b8583036040870152612c64838284612bda565b92505050612c756060840184612b66565b8583036060870152612c88838284612bda565b92505050612c996080840184612b31565b612ca66080860182612b48565b50612cb460a0840184612b31565b612cc160a0860182612b48565b50612ccf60c0840184612b31565b612cdc60c0860182612b48565b50612cea60e0840184612b31565b612cf760e0860182612b48565b50612d06610100840184612b31565b612d14610100860182612b48565b50612d23610120840184612b66565b858303610120870152612d37838284612bda565b92505050612d49610140840184612b66565b858303610140870152612d5d838284612bda565b925050508091505092915050565b60006060820190508181036000830152612d858186612c07565b9050612d94602083018561265a565b612da16040830184611edb565b949350505050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612ddf6018836119c6565b9150612dea82612da9565b602082019050919050565b60006020820190508181036000830152612e0e81612dd2565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612e4b601f836119c6565b9150612e5682612e15565b602082019050919050565b60006020820190508181036000830152612e7a81612e3e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612edd6022836119c6565b9150612ee882612e81565b604082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f49600283612a6d565b9150612f5482612f13565b600282019050919050565b6000612f6a82612f3c565b9150612f768285612ace565b602082019150612f868284612ace565b6020820191508190509392505050565b600060ff82169050919050565b612fac81612f96565b82525050565b6000608082019050612fc7600083018761265a565b612fd46020830186612fa3565b612fe1604083018561265a565b612fee606083018461265a565b95945050505050565b600060a08201905061300c600083018861265a565b613019602083018761265a565b613026604083018661265a565b6130336060830185611edb565b6130406080830184611f82565b969550505050505056fea264697066735822122032ca1cf88a7b31318141bd230c1cabd5f99c4503ed694966da441ea9decb738c64736f6c63430008120033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063037637aa146200004b5780630d253d76146200006d5780635fbfb9cf14620000a3575b600080fd5b62000055620000d9565b604051620000649190620005a4565b60405180910390f35b6200008b600480360381019062000085919062000646565b620000fd565b6040516200009a91906200069e565b60405180910390f35b620000c16004803603810190620000bb919062000646565b6200022b565b604051620000d09190620006e0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008083836040516020016200011592919062000772565b60405160208183030381529060405280519060200120905062000222816040518060200162000144906200050b565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000876040516024016200018c91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001e49291906200083c565b60405160208183030381529060405260405160200162000206929190620008b2565b60405160208183030381529060405280519060200120620004c9565b91505092915050565b60008083836040516020016200024392919062000772565b604051602081830303815290604052805190602001209050600062000352826040518060200162000274906200050b565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000088604051602401620002bc91906200069e565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620003149291906200083c565b60405160208183030381529060405260405160200162000336929190620008b2565b60405160208183030381529060405280519060200120620004c9565b905060008173ffffffffffffffffffffffffffffffffffffffff163b111562000380578092505050620004c3565b817f000000000000000000000000000000000000000000000000000000000000000063c4d66de860e01b87604051602401620003bd91906200069e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000428906200050b565b620004359291906200083c565b8190604051809103906000f590508015801562000456573d6000803e3d6000fd5b5092508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f33310a89c32d8cc00057ad6ef6274d2f8fe22389a992cf89983e09fc84f6cfff86604051620004b89190620008eb565b60405180910390a350505b92915050565b6000620004d8838330620004e0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b6105e8806200090983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005646200055e620005588462000519565b62000539565b62000519565b9050919050565b6000620005788262000543565b9050919050565b60006200058c826200056b565b9050919050565b6200059e816200057f565b82525050565b6000602082019050620005bb600083018462000593565b92915050565b600080fd5b6000620005d38262000519565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000813590506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081359050620006408162000615565b92915050565b6000806040838503121562000660576200065f620005c1565b5b60006200067085828601620005f4565b925050602062000683858286016200062f565b9150509250929050565b6200069881620005c6565b82525050565b6000602082019050620006b560008301846200068d565b92915050565b6000620006c8826200056b565b9050919050565b620006da81620006bb565b82525050565b6000602082019050620006f76000830184620006cf565b92915050565b60008160601b9050919050565b60006200071782620006fd565b9050919050565b60006200072b826200070a565b9050919050565b620007476200074182620005c6565b6200071e565b82525050565b6000819050919050565b6200076c62000766826200060b565b6200074d565b82525050565b600062000780828562000732565b60148201915062000792828462000757565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007de578082015181840152602081019050620007c1565b60008484015250505050565b6000601f19601f8301169050919050565b60006200080882620007a2565b620008148185620007ad565b935062000826818560208601620007be565b6200083181620007ea565b840191505092915050565b60006040820190506200085360008301856200068d565b8181036020830152620008678184620007fb565b90509392505050565b600081905092915050565b60006200088882620007a2565b62000894818562000870565b9350620008a6818560208601620007be565b80840191505092915050565b6000620008c082856200087b565b9150620008ce82846200087b565b91508190509392505050565b620008e5816200060b565b82525050565b6000602082019050620009026000830184620008da565b9291505056fe60806040526040516105e83803806105e883398181016040528101906100259190610351565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008b90610430565b60405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508281556000825111156101765760008373ffffffffffffffffffffffffffffffffffffffff16836040516100f09190610497565b600060405180830381855af49150503d806000811461012b576040519150601f19603f3d011682016040523d82523d6000602084013e610130565b606091505b5050905080610174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016b90610520565b60405180910390fd5b505b505050610540565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000815190506101ea816101c4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610243826101fa565b810181811067ffffffffffffffff821117156102625761026161020b565b5b80604052505050565b600061027561017e565b9050610281828261023a565b919050565b600067ffffffffffffffff8211156102a1576102a061020b565b5b6102aa826101fa565b9050602081019050919050565b60005b838110156102d55780820151818401526020810190506102ba565b60008484015250505050565b60006102f46102ef84610286565b61026b565b9050828152602081018484840111156103105761030f6101f5565b5b61031b8482856102b7565b509392505050565b600082601f830112610338576103376101f0565b5b81516103488482602086016102e1565b91505092915050565b6000806040838503121561036857610367610188565b5b6000610376858286016101db565b925050602083015167ffffffffffffffff8111156103975761039661018d565b5b6103a385828601610323565b9150509250929050565b600082825260208201905092915050565b7f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060008201527f746865207a65726f206164647265737300000000000000000000000000000000602082015250565b600061041a6030836103ad565b9150610425826103be565b604082019050919050565b600060208201905081810360008301526104498161040d565b9050919050565b600081519050919050565b600081905092915050565b600061047182610450565b61047b818561045b565b935061048b8185602086016102b7565b80840191505092915050565b60006104a38284610466565b915081905092915050565b7f4549503139363750726f78793a20636f6e7374727563746f722063616c6c206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b600061050a6025836103ad565b9150610515826104ae565b604082019050919050565b60006020820190508181036000830152610539816104fd565b9050919050565b609a8061054e6000396000f3fe60806040526000600c6033565b90503660008037600080366000845af43d6000803e8060008114602e573d6000f35b3d6000fd5b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150509056fea2646970667358221220388bcbb27d5b065c1b785d1b94666d7f301b338574b92c716035a8fc03df3d4064736f6c63430008120033a2646970667358221220f50046c0d563594938691fabbaecaf185ed1de2d60d093c2816cf6a34a40c32a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/polygon/ZeroDevSessionKeyPlugin.json b/deployments/polygon/ZeroDevSessionKeyPlugin.json deleted file mode 100644 index aa845146..00000000 --- a/deployments/polygon/ZeroDevSessionKeyPlugin.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "address": "0x6E2631aF80bF7a9cEE83F590eE496bCc2E40626D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "key", - "type": "address" - } - ], - "name": "SessionKeyRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packed", - "type": "bytes" - } - ], - "name": "parseDataAndSignature", - "outputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revokeSessionKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_key", - "type": "address" - } - ], - "name": "revoked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validatePluginData", - "outputs": [ - { - "internalType": "bool", - "name": "validated", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x47c6c345ed279550cff6a4f9d03c828a2a91d687fe3efa4a30a4cf959bb74a6d", - "receipt": { - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "from": "0x8d8a9Cf53b7D95C148cB159384D249F8FB68db3f", - "contractAddress": null, - "transactionIndex": 20, - "gasUsed": "1716069", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000008000000000000000000000000000000000000000000020000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000008000004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000041000000000000000000000000000000100000000000000000000000000000000000000000000800000000000000000000000000100000", - "blockHash": "0xcdaf96edb2f94217be6eaa18c699362dd1ffcd7bf5eb1727ba5f78259785d6d4", - "transactionHash": "0x47c6c345ed279550cff6a4f9d03c828a2a91d687fe3efa4a30a4cf959bb74a6d", - "logs": [ - { - "transactionIndex": 20, - "blockNumber": 41756616, - "transactionHash": "0x47c6c345ed279550cff6a4f9d03c828a2a91d687fe3efa4a30a4cf959bb74a6d", - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000008d8a9cf53b7d95c148cb159384d249f8fb68db3f", - "0x000000000000000000000000b2dd091ea6e591d62f565d7a18ce2a7640add227" - ], - "data": "0x00000000000000000000000000000000000000000000000000b6e6ab7ea6dc000000000000000000000000000000000000000000000000013a3e29fc746cb7790000000000000000000000000000000000000000000005dc18ef5d92af3c9cdb00000000000000000000000000000000000000000000000139874350f5c5db790000000000000000000000000000000000000000000005dc19a6443e2de378db", - "logIndex": 211, - "blockHash": "0xcdaf96edb2f94217be6eaa18c699362dd1ffcd7bf5eb1727ba5f78259785d6d4" - } - ], - "blockNumber": 41756616, - "cumulativeGasUsed": "26223434", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "d5c4a417af7f759d03a3c7da438dc2be", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"key\",\"type\":\"address\"}],\"name\":\"SessionKeyRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packed\",\"type\":\"bytes\"}],\"name\":\"parseDataAndSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revokeSessionKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_key\",\"type\":\"address\"}],\"name\":\"revoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validatePluginData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"validated\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/plugin/ZeroDevSessionKeyPlugin.sol\":\"ZeroDevSessionKeyPlugin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\n/**\\n * returned data from validateUserOp.\\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\\n * @param aggregator - address(0) - the account validated the signature by itself.\\n * address(1) - the account failed to validate the signature.\\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\\n * @param validAfter - this UserOp is valid only after this timestamp.\\n * @param validaUntil - this UserOp is valid only up to this timestamp.\\n */\\n struct ValidationData {\\n address aggregator;\\n uint48 validAfter;\\n uint48 validUntil;\\n }\\n\\n//extract sigFailed, validAfter, validUntil.\\n// also convert zero validUntil to type(uint48).max\\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\\n address aggregator = address(uint160(validationData));\\n uint48 validUntil = uint48(validationData >> 160);\\n if (validUntil == 0) {\\n validUntil = type(uint48).max;\\n }\\n uint48 validAfter = uint48(validationData >> (48 + 160));\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n// intersect account and paymaster ranges.\\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\\n ValidationData memory accountValidationData = _parseValidationData(validationData);\\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\\n address aggregator = accountValidationData.aggregator;\\n if (aggregator == address(0)) {\\n aggregator = pmValidationData.aggregator;\\n }\\n uint48 validAfter = accountValidationData.validAfter;\\n uint48 validUntil = accountValidationData.validUntil;\\n uint48 pmValidAfter = pmValidationData.validAfter;\\n uint48 pmValidUntil = pmValidationData.validUntil;\\n\\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\\n return ValidationData(aggregator, validAfter, validUntil);\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp\\n * @param data - the ValidationData to pack\\n */\\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\\n }\\n\\n/**\\n * helper to pack the return value for validateUserOp, when not using an aggregator\\n * @param sigFailed - true for signature failure, false for success\\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\\n * @param validAfter first timestamp this UserOperation is valid\\n */\\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\\n }\\n\\n/**\\n * keccak function over calldata.\\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\\n */\\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\\n assembly {\\n let mem := mload(0x40)\\n let len := data.length\\n calldatacopy(mem, data.offset, len)\\n ret := keccak256(mem, len)\\n }\\n }\\n\\n\",\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\ninterface IAccount {\\n\\n /**\\n * Validate user's signature and nonce\\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\\n * This allows making a \\\"simulation call\\\" without a valid signature\\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\\n *\\n * @dev Must validate caller is the entryPoint.\\n * Must validate the signature and nonce\\n * @param userOp the operation that is about to be executed.\\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\\n * The excess is left as a deposit in the entrypoint, for future calls.\\n * can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\"\\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\\n * otherwise, an address of an \\\"authorizer\\\" contract.\\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"\\n * <6-byte> validAfter - first timestamp this operation is valid\\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\\n */\\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external returns (uint256 validationData);\\n}\\n\",\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\nimport \\\"./UserOperation.sol\\\";\\n\\n/**\\n * Aggregated Signatures validator.\\n */\\ninterface IAggregator {\\n\\n /**\\n * validate aggregated signature.\\n * revert if the aggregated signature does not match the given list of operations.\\n */\\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\\n\\n /**\\n * validate signature of a single userOp\\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\\n * @param userOp the userOperation received from the user.\\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\\n * (usually empty, unless account and aggregator support some kind of \\\"multisig\\\"\\n */\\n function validateUserOpSignature(UserOperation calldata userOp)\\n external view returns (bytes memory sigForUserOp);\\n\\n /**\\n * aggregate multiple signatures into a single value.\\n * This method is called off-chain to calculate the signature to pass with handleOps()\\n * bundler MAY use optimized custom code perform this aggregation\\n * @param userOps array of UserOperations to collect the signatures from.\\n * @return aggregatedSignature the aggregated signature\\n */\\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\\n}\\n\",\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"content\":\"/**\\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\\n ** Only one instance required on each chain.\\n **/\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./UserOperation.sol\\\";\\nimport \\\"./IStakeManager.sol\\\";\\nimport \\\"./IAggregator.sol\\\";\\nimport \\\"./INonceManager.sol\\\";\\n\\ninterface IEntryPoint is IStakeManager, INonceManager {\\n\\n /***\\n * An event emitted after each successful request\\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\\n * @param sender - the account that generates this request.\\n * @param paymaster - if non-null, the paymaster that pays for this request.\\n * @param nonce - the nonce value from the request.\\n * @param success - true if the sender transaction succeeded, false if reverted.\\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\\n */\\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\\n\\n /**\\n * account \\\"sender\\\" was deployed.\\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\\n * @param sender the account that is deployed\\n * @param factory the factory used to deploy this account (in the initCode)\\n * @param paymaster the paymaster used by this UserOp\\n */\\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\\n\\n /**\\n * An event emitted if the UserOperation \\\"callData\\\" reverted with non-zero length\\n * @param userOpHash the request unique identifier.\\n * @param sender the sender of this request\\n * @param nonce the nonce used in the request\\n * @param revertReason - the return bytes from the (reverted) call to \\\"callData\\\".\\n */\\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\\n\\n /**\\n * an event emitted by handleOps(), before starting the execution loop.\\n * any event emitted before this event, is part of the validation.\\n */\\n event BeforeExecution();\\n\\n /**\\n * signature aggregator used by the following UserOperationEvents within this bundle.\\n */\\n event SignatureAggregatorChanged(address indexed aggregator);\\n\\n /**\\n * a custom revert error of handleOps, to identify the offending op.\\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\\n * @param reason - revert reason\\n * The string starts with a unique code \\\"AAmn\\\", where \\\"m\\\" is \\\"1\\\" for factory, \\\"2\\\" for account and \\\"3\\\" for paymaster issues,\\n * so a failure can be attributed to the correct entity.\\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\\n */\\n error FailedOp(uint256 opIndex, string reason);\\n\\n /**\\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\\n */\\n error SignatureValidationFailed(address aggregator);\\n\\n /**\\n * Successful result from simulateValidation.\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n */\\n error ValidationResult(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\\n\\n /**\\n * Successful result from simulateValidation, if the account returns a signature aggregator\\n * @param returnInfo gas and time-range returned values\\n * @param senderInfo stake information about the sender\\n * @param factoryInfo stake information about the factory (if any)\\n * @param paymasterInfo stake information about the paymaster (if any)\\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\\n * bundler MUST use it to verify the signature, or reject the UserOperation\\n */\\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\\n AggregatorStakeInfo aggregatorInfo);\\n\\n /**\\n * return value of getSenderAddress\\n */\\n error SenderAddressResult(address sender);\\n\\n /**\\n * return value of simulateHandleOp\\n */\\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\\n\\n //UserOps handled, per aggregator\\n struct UserOpsPerAggregator {\\n UserOperation[] userOps;\\n\\n // aggregator address\\n IAggregator aggregator;\\n // aggregated signature\\n bytes signature;\\n }\\n\\n /**\\n * Execute a batch of UserOperation.\\n * no signature aggregator is used.\\n * if any account requires an aggregator (that is, it returned an aggregator when\\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\\n * @param ops the operations to execute\\n * @param beneficiary the address to receive the fees\\n */\\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\\n\\n /**\\n * Execute a batch of UserOperation with Aggregators\\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\\n * @param beneficiary the address to receive the fees\\n */\\n function handleAggregatedOps(\\n UserOpsPerAggregator[] calldata opsPerAggregator,\\n address payable beneficiary\\n ) external;\\n\\n /**\\n * generate a request Id - unique identifier for this request.\\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\\n */\\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\\n\\n /**\\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\\n * @param userOp the user operation to validate.\\n */\\n function simulateValidation(UserOperation calldata userOp) external;\\n\\n /**\\n * gas and return values during simulation\\n * @param preOpGas the gas used for validation (including preValidationGas)\\n * @param prefund the required prefund for this operation\\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\\n */\\n struct ReturnInfo {\\n uint256 preOpGas;\\n uint256 prefund;\\n bool sigFailed;\\n uint48 validAfter;\\n uint48 validUntil;\\n bytes paymasterContext;\\n }\\n\\n /**\\n * returned aggregated signature info.\\n * the aggregator returned by the account, and its current stake.\\n */\\n struct AggregatorStakeInfo {\\n address aggregator;\\n StakeInfo stakeInfo;\\n }\\n\\n /**\\n * Get counterfactual sender address.\\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\\n * this method always revert, and returns the address in SenderAddressResult error\\n * @param initCode the constructor code to be passed into the UserOperation.\\n */\\n function getSenderAddress(bytes memory initCode) external;\\n\\n\\n /**\\n * simulate full execution of a UserOperation (including both validation and target execution)\\n * this method will always revert with \\\"ExecutionResult\\\".\\n * it performs full validation of the UserOperation, but ignores signature error.\\n * an optional target address is called after the userop succeeds, and its value is returned\\n * (before the entire call is reverted)\\n * Note that in order to collect the the success/failure of the target call, it must be executed\\n * with trace enabled to track the emitted events.\\n * @param op the UserOperation to simulate\\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\\n * are set to the return from that call.\\n * @param targetCallData callData to pass to target address\\n */\\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\\n}\\n\\n\",\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\ninterface INonceManager {\\n\\n /**\\n * Return the next nonce for this sender.\\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\\n * But UserOp with different keys can come with arbitrary order.\\n *\\n * @param sender the account address\\n * @param key the high 192 bit of the nonce\\n * @return nonce a full nonce to pass for next UserOp with this sender.\\n */\\n function getNonce(address sender, uint192 key)\\n external view returns (uint256 nonce);\\n\\n /**\\n * Manually increment the nonce of the sender.\\n * This method is exposed just for completeness..\\n * Account does NOT need to call it, neither during validation, nor elsewhere,\\n * as the EntryPoint will update the nonce regardless.\\n * Possible use-case is call it with various keys to \\\"initialize\\\" their nonces to one, so that future\\n * UserOperations will not pay extra for the first transaction with a given key.\\n */\\n function incrementNonce(uint192 key) external;\\n}\\n\",\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\"},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-only\\npragma solidity ^0.8.12;\\n\\n/**\\n * manage deposits and stakes.\\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\\n * stake is value locked for at least \\\"unstakeDelay\\\" by the staked entity.\\n */\\ninterface IStakeManager {\\n\\n event Deposited(\\n address indexed account,\\n uint256 totalDeposit\\n );\\n\\n event Withdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /// Emitted when stake or unstake delay are modified\\n event StakeLocked(\\n address indexed account,\\n uint256 totalStaked,\\n uint256 unstakeDelaySec\\n );\\n\\n /// Emitted once a stake is scheduled for withdrawal\\n event StakeUnlocked(\\n address indexed account,\\n uint256 withdrawTime\\n );\\n\\n event StakeWithdrawn(\\n address indexed account,\\n address withdrawAddress,\\n uint256 amount\\n );\\n\\n /**\\n * @param deposit the entity's deposit\\n * @param staked true if this entity is staked.\\n * @param stake actual amount of ether staked for this entity.\\n * @param unstakeDelaySec minimum delay to withdraw the stake.\\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\\n * and the rest fit into a 2nd cell.\\n * 112 bit allows for 10^15 eth\\n * 48 bit for full timestamp\\n * 32 bit allows 150 years for unstake delay\\n */\\n struct DepositInfo {\\n uint112 deposit;\\n bool staked;\\n uint112 stake;\\n uint32 unstakeDelaySec;\\n uint48 withdrawTime;\\n }\\n\\n //API struct used by getStakeInfo and simulateValidation\\n struct StakeInfo {\\n uint256 stake;\\n uint256 unstakeDelaySec;\\n }\\n\\n /// @return info - full deposit information of given account\\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\\n\\n /// @return the deposit (for gas payment) of the account\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * add to the deposit of the given account\\n */\\n function depositTo(address account) external payable;\\n\\n /**\\n * add to the account's stake - amount and delay\\n * any pending unstake is first cancelled.\\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\\n */\\n function addStake(uint32 _unstakeDelaySec) external payable;\\n\\n /**\\n * attempt to unlock the stake.\\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\\n */\\n function unlockStake() external;\\n\\n /**\\n * withdraw from the (unlocked) stake.\\n * must first call unlockStake and wait for the unstakeDelay to pass\\n * @param withdrawAddress the address to send withdrawn value.\\n */\\n function withdrawStake(address payable withdrawAddress) external;\\n\\n /**\\n * withdraw from the deposit.\\n * @param withdrawAddress the address to send withdrawn value.\\n * @param withdrawAmount the amount to withdraw.\\n */\\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\\n}\\n\",\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\"},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.12;\\n\\n/* solhint-disable no-inline-assembly */\\n\\nimport {calldataKeccak} from \\\"../core/Helpers.sol\\\";\\n\\n/**\\n * User Operation struct\\n * @param sender the sender account of this request.\\n * @param nonce unique value the sender uses to verify it is not a replay.\\n * @param initCode if set, the account contract will be created by this constructor/\\n * @param callData the method call to execute on this account.\\n * @param callGasLimit the gas limit passed to the callData method call.\\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\\n * @param maxFeePerGas same as EIP-1559 gas parameter.\\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\\n */\\n struct UserOperation {\\n\\n address sender;\\n uint256 nonce;\\n bytes initCode;\\n bytes callData;\\n uint256 callGasLimit;\\n uint256 verificationGasLimit;\\n uint256 preVerificationGas;\\n uint256 maxFeePerGas;\\n uint256 maxPriorityFeePerGas;\\n bytes paymasterAndData;\\n bytes signature;\\n }\\n\\n/**\\n * Utility functions helpful when working with UserOperation structs.\\n */\\nlibrary UserOperationLib {\\n\\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\\n address data;\\n //read sender from userOp, which is first userOp member (saves 800 gas...)\\n assembly {data := calldataload(userOp)}\\n return address(uint160(data));\\n }\\n\\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\\n // pay above what he signed for.\\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\\n unchecked {\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n if (maxFeePerGas == maxPriorityFeePerGas) {\\n //legacy mode (for networks that don't support basefee opcode)\\n return maxFeePerGas;\\n }\\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\\n }\\n }\\n\\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\\n address sender = getSender(userOp);\\n uint256 nonce = userOp.nonce;\\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\\n bytes32 hashCallData = calldataKeccak(userOp.callData);\\n uint256 callGasLimit = userOp.callGasLimit;\\n uint256 verificationGasLimit = userOp.verificationGasLimit;\\n uint256 preVerificationGas = userOp.preVerificationGas;\\n uint256 maxFeePerGas = userOp.maxFeePerGas;\\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\\n\\n return abi.encode(\\n sender, nonce,\\n hashInitCode, hashCallData,\\n callGasLimit, verificationGasLimit, preVerificationGas,\\n maxFeePerGas, maxPriorityFeePerGas,\\n hashPaymasterAndData\\n );\\n }\\n\\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\\n return keccak256(pack(userOp));\\n }\\n\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n}\\n\",\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle Tree proofs.\\n *\\n * The tree and the proofs can be generated using our\\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\\n * You will find a quickstart guide in the readme.\\n *\\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\\n * hashing, or use a hash function other than keccak256 for hashing leaves.\\n * This is because the concatenation of a sorted pair of internal nodes in\\n * the merkle tree could be reinterpreted as a leaf value.\\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\\n * against this attack out of the box.\\n */\\nlibrary MerkleProof {\\n /**\\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n * defined by `root`. For this, a `proof` must be provided, containing\\n * sibling hashes on the branch from the leaf to the root of the tree. Each\\n * pair of leaves and each pair of pre-images are assumed to be sorted.\\n */\\n function verify(\\n bytes32[] memory proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProof(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {verify}\\n *\\n * _Available since v4.7._\\n */\\n function verifyCalldata(\\n bytes32[] calldata proof,\\n bytes32 root,\\n bytes32 leaf\\n ) internal pure returns (bool) {\\n return processProofCalldata(proof, leaf) == root;\\n }\\n\\n /**\\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\\n * hash matches the root of the tree. When processing the proof, the pairs\\n * of leafs & pre-images are assumed to be sorted.\\n *\\n * _Available since v4.4._\\n */\\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Calldata version of {processProof}\\n *\\n * _Available since v4.7._\\n */\\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\\n bytes32 computedHash = leaf;\\n for (uint256 i = 0; i < proof.length; i++) {\\n computedHash = _hashPair(computedHash, proof[i]);\\n }\\n return computedHash;\\n }\\n\\n /**\\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerify(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProof(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Calldata version of {multiProofVerify}\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function multiProofVerifyCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32 root,\\n bytes32[] memory leaves\\n ) internal pure returns (bool) {\\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\\n }\\n\\n /**\\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\\n * respectively.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProof(\\n bytes32[] memory proof,\\n bool[] memory proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n /**\\n * @dev Calldata version of {processMultiProof}.\\n *\\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\\n *\\n * _Available since v4.7._\\n */\\n function processMultiProofCalldata(\\n bytes32[] calldata proof,\\n bool[] calldata proofFlags,\\n bytes32[] memory leaves\\n ) internal pure returns (bytes32 merkleRoot) {\\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\\n // the merkle tree.\\n uint256 leavesLen = leaves.length;\\n uint256 totalHashes = proofFlags.length;\\n\\n // Check proof validity.\\n require(leavesLen + proof.length - 1 == totalHashes, \\\"MerkleProof: invalid multiproof\\\");\\n\\n // The xxxPos values are \\\"pointers\\\" to the next value to consume in each array. All accesses are done using\\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \\\"pop\\\".\\n bytes32[] memory hashes = new bytes32[](totalHashes);\\n uint256 leafPos = 0;\\n uint256 hashPos = 0;\\n uint256 proofPos = 0;\\n // At each step, we compute the next hash using two values:\\n // - a value from the \\\"main queue\\\". If not all leaves have been consumed, we get the next leaf, otherwise we\\n // get the next hash.\\n // - depending on the flag, either another value for the \\\"main queue\\\" (merging branches) or an element from the\\n // `proof` array.\\n for (uint256 i = 0; i < totalHashes; i++) {\\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\\n hashes[i] = _hashPair(a, b);\\n }\\n\\n if (totalHashes > 0) {\\n return hashes[totalHashes - 1];\\n } else if (leavesLen > 0) {\\n return leaves[0];\\n } else {\\n return proof[0];\\n }\\n }\\n\\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\\n }\\n\\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, a)\\n mstore(0x20, b)\\n value := keccak256(0x00, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd466e8b07f4c6220eac16da5127f3ff142e65f0c15c03c7d38f257b02c8585e1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"src/plugin/IPlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"account-abstraction/interfaces/UserOperation.sol\\\";\\n\\ninterface IPlugin {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xe560c14d4055e404a78ea0984006255a5b4d6acf29859de2f690520abf06a6a2\",\"license\":\"MIT\"},\"src/plugin/ZeroDevBasePlugin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\\\";\\nimport \\\"account-abstraction/interfaces/IAccount.sol\\\";\\nimport \\\"account-abstraction/interfaces/IEntryPoint.sol\\\";\\nimport \\\"./IPlugin.sol\\\";\\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\\n external\\n override\\n returns (bool validated)\\n {\\n // data offset starts at 97\\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\\n validated = _validatePluginData(userOp, userOpHash, data, signature);\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal virtual returns (bool success);\\n\\n function parseDataAndSignature(bytes calldata _packed)\\n public\\n pure\\n returns (bytes calldata data, bytes calldata signature)\\n {\\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\\n\\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \\\"invalid data\\\");\\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \\\"invalid signature\\\");\\n }\\n}\\n\",\"keccak256\":\"0x600b768ba7d0766b2968c0d9bd6cd21154f14694eeb1e1a745d110d0fcb854e8\",\"license\":\"MIT\"},\"src/plugin/ZeroDevSessionKeyPlugin.sol\":{\"content\":\"//SPDX-License-Identifier: GPL\\npragma solidity ^0.8.7;\\n\\n/* solhint-disable avoid-low-level-calls */\\n/* solhint-disable no-inline-assembly */\\n/* solhint-disable reason-string */\\n\\nimport \\\"./ZeroDevBasePlugin.sol\\\";\\nimport \\\"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\\\";\\nusing ECDSA for bytes32;\\n/**\\n * Main EIP4337 module.\\n * Called (through the fallback module) using \\\"delegate\\\" from the GnosisSafe as an \\\"IAccount\\\",\\n * so must implement validateUserOp\\n * holds an immutable reference to the EntryPoint\\n */\\n\\nstruct ZeroDevSessionKeyStorageStruct {\\n mapping(address => bool) revoked;\\n}\\n\\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\\n // return value in case of signature failure, with no time-range.\\n // equivalent to packSigTimeRange(true,0,0);\\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\\n\\n event SessionKeyRevoked(address indexed key);\\n\\n constructor() EIP712(\\\"ZeroDevSessionKeyPlugin\\\", \\\"0.0.1\\\") {}\\n\\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\\n bytes32 position = bytes32(uint256(keccak256(\\\"zero-dev.account.eip4337.sessionkey\\\")) - 1);\\n assembly {\\n s.slot := position\\n }\\n }\\n\\n // revoke session key\\n function revokeSessionKey(address _key) external {\\n getPolicyStorage().revoked[_key] = true;\\n emit SessionKeyRevoked(_key);\\n }\\n\\n function revoked(address _key) external view returns (bool) {\\n return getPolicyStorage().revoked[_key];\\n }\\n\\n function _validatePluginData(\\n UserOperation calldata userOp,\\n bytes32 userOpHash,\\n bytes calldata data,\\n bytes calldata signature\\n ) internal view override returns (bool) {\\n address sessionKey = address(bytes20(data[0:20]));\\n require(!getPolicyStorage().revoked[sessionKey], \\\"session key revoked\\\");\\n bytes32 merkleRoot = bytes32(data[20:52]);\\n if(merkleRoot == bytes32(0)) {\\n // means this session key has sudo permission\\n signature = signature[33:98];\\n } else {\\n uint8 leafLength = uint8(signature[0]);\\n bytes32[] memory proof;\\n bytes32 leaf;\\n if(leafLength == 20) {\\n leaf = keccak256(signature[1:21]);\\n proof = abi.decode(signature[86:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n signature = signature[21:86];\\n } else if(leafLength == 24) {\\n leaf = keccak256(signature[1:25]);\\n proof = abi.decode(signature[90:], (bytes32[]));\\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \\\"invalid session key\\\");\\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\\n require(keccak256(sig) == keccak256(signature[21:25]));\\n signature = signature[25:90];\\n }\\n require(MerkleProof.verify(proof, merkleRoot, leaf), \\\"invalide merkle root\\\");\\n }\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n keccak256(\\\"Session(bytes32 userOpHash,uint256 nonce)\\\"), // we are going to trust plugin for verification\\n userOpHash,\\n userOp.nonce\\n )\\n )\\n );\\n address recovered = digest.recover(signature);\\n require(recovered == sessionKey, \\\"account: invalid signature\\\");\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0x7463f6b16e3dacf9d618a25e7cb6e12e210ff96682051c62d5a5d6e9243adb30\",\"license\":\"GPL\"}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040518060400160405280601781526020017f5a65726f44657653657373696f6e4b6579506c7567696e0000000000000000008152506040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620000e88184846200013760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050506200024b565b6000838383463060405160200162000154959493929190620001ee565b6040516020818303038152906040528051906020012090509392505050565b6000819050919050565b620001888162000173565b82525050565b6000819050919050565b620001a3816200018e565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d682620001a9565b9050919050565b620001e881620001c9565b82525050565b600060a0820190506200020560008301886200017d565b6200021460208301876200017d565b6200022360408301866200017d565b62000232606083018562000198565b620002416080830184620001dd565b9695505050505050565b60805160a05160c05160e0516101005161012051611e016200029b6000396000610bac01526000610bee01526000610bcd01526000610b0201526000610b5801526000610b810152611e016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806384f4fc6a14610051578063970aa9ad1461006d5780639e2045ce146100a0578063fa01dc06146100d0575b600080fd5b61006b60048036038101906100669190610fd2565b610100565b005b61008760048036038101906100829190611064565b6101a7565b604051610097949392919061110f565b60405180910390f35b6100ba60048036038101906100b591906111db565b6103ba565b6040516100c79190611265565b60405180910390f35b6100ea60048036038101906100e59190610fd2565b61040f565b6040516100f79190611265565b60405180910390f35b600161010a61046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f17c796fb82086b3c9effaec517342e5ca9ed8fd78c339137ec082f748ab60cbe60405160405180910390a250565b3660003660008086866000906020926101c29392919061128a565b906101cd91906112dd565b60001c90506000878783906020856101e5919061136b565b926101f29392919061128a565b906101fd91906112dd565b60001c9050600088886020906040926102189392919061128a565b9061022391906112dd565b60001c905060008989839060208561023b919061136b565b926102489392919061128a565b9061025391906112dd565b60001c90508989602086610267919061136b565b9085602088610276919061136b565b610280919061136b565b9261028d9392919061128a565b9750975089896020846102a0919061136b565b90836020866102af919061136b565b6102b9919061136b565b926102c69392919061128a565b9550955081602080856102d991906113ce565b6102e391906113ff565b6040866102f0919061136b565b6102fa919061136b565b1461033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061149e565b60405180910390fd5b898990506020808361034c91906113ce565b61035691906113ff565b604084610363919061136b565b61036d919061136b565b146103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a49061150a565b60405180910390fd5b5050505092959194509250565b60003660003660006103ec888061014001906103d69190611539565b60619080926103e79392919061128a565b6101a7565b93509350935093506104028888868686866104ad565b9450505050509392505050565b600061041961046e565b60000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060017f6da8a1d7d4f224b5b2581a964c1890eb7e987638c691727e5a2a14ca24d03fd960001c6104a1919061159c565b60001b90508091505090565b60008085856000906014926104c49392919061128a565b906104cf91906115fc565b60601c90506104dc61046e565b60000160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561056a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610561906116a7565b60405180910390fd5b600086866014906034926105809392919061128a565b9061058b91906112dd565b90506000801b81036105b45784846021906062926105ab9392919061128a565b9450945061091a565b6000858560008181106105ca576105c96116c7565b5b9050013560f81c60f81b60f81c90506060600060148360ff16036106f55787876001906015926105fc9392919061128a565b60405161060a929190611726565b60405180910390209050878760569080926106279392919061128a565b810190610634919061187d565b9150878760019060159261064a9392919061128a565b604051610658929190611726565b60405180910390208c80606001906106709190611539565b6010906024926106829392919061128a565b604051610690929190611726565b6040518091039020146106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611912565b60405180910390fd5b87876015906056926106ec9392919061128a565b975097506108cc565b60188360ff16036108cb5787876001906019926107149392919061128a565b604051610722929190611726565b604051809103902090508787605a90809261073f9392919061128a565b81019061074c919061187d565b915087876001906015926107629392919061128a565b604051610770929190611726565b60405180910390208c80606001906107889190611539565b60109060249261079a9392919061128a565b6040516107a8929190611726565b6040518091039020146107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611912565b60405180910390fd5b60008c80606001906108029190611539565b6044906064926108149392919061128a565b9061081f91906112dd565b60001c90503660008e80606001906108379190611539565b602485610844919061136b565b90602886610852919061136b565b9261085f9392919061128a565b915091508a8a6015906019926108779392919061128a565b604051610885929190611726565b6040518091039020828260405161089d929190611932565b6040518091039020146108af57600080fd5b8a8a601990605a926108c39392919061128a565b9a509a505050505b5b6108d7828583610a50565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90611997565b60405180910390fd5b5050505b60006109737ff0a98eef9608fd8bfe5833dfbc8b73ab86d0355db37a1f539565c5985ad1c2428a8c60200135604051602001610958939291906119d5565b60405160208183030381529060405280519060200120610a67565b905060006109ce87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610a8190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a58565b60405180910390fd5b60019450505050509695505050505050565b600082610a5d8584610aa8565b1490509392505050565b6000610a7a610a74610afe565b83610c18565b9050919050565b6000806000610a908585610c4b565b91509150610a9d81610c9c565b819250505092915050565b60008082905060005b8451811015610af357610ade82868381518110610ad157610ad06116c7565b5b6020026020010151610e02565b91508080610aeb90611a78565b915050610ab1565b508091505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610b7a57507f000000000000000000000000000000000000000000000000000000000000000046145b15610ba7577f00000000000000000000000000000000000000000000000000000000000000009050610c15565b610c127f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e2d565b90505b90565b60008282604051602001610c2d929190611b38565b60405160208183030381529060405280519060200120905092915050565b6000806041835103610c8c5760008060006020860151925060408601519150606086015160001a9050610c8087828585610e67565b94509450505050610c95565b60006002915091505b9250929050565b60006004811115610cb057610caf611b6f565b5b816004811115610cc357610cc2611b6f565b5b0315610dff5760016004811115610cdd57610cdc611b6f565b5b816004811115610cf057610cef611b6f565b5b03610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611bea565b60405180910390fd5b60026004811115610d4457610d43611b6f565b5b816004811115610d5757610d56611b6f565b5b03610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611c56565b60405180910390fd5b60036004811115610dab57610daa611b6f565b5b816004811115610dbe57610dbd611b6f565b5b03610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590611ce8565b60405180910390fd5b5b50565b6000818310610e1a57610e158284610f49565b610e25565b610e248383610f49565b5b905092915050565b60008383834630604051602001610e48959493929190611d17565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea2576000600391509150610f40565b600060018787878760405160008152602001604052604051610ec79493929190611d86565b6020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3757600060019250925050610f40565b80600092509250505b94509492505050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610f6a565b5b6000610ff684828501610fbd565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261102457611023610fff565b5b8235905067ffffffffffffffff81111561104157611040611004565b5b60208301915083600182028301111561105d5761105c611009565b5b9250929050565b6000806020838503121561107b5761107a610f6a565b5b600083013567ffffffffffffffff81111561109957611098610f6f565b5b6110a58582860161100e565b92509250509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006110ee83856110b1565b93506110fb8385846110c2565b611104836110d1565b840190509392505050565b6000604082019050818103600083015261112a8186886110e2565b9050818103602083015261113f8184866110e2565b905095945050505050565b600080fd5b600061016082840312156111665761116561114a565b5b81905092915050565b6000819050919050565b6111828161116f565b811461118d57600080fd5b50565b60008135905061119f81611179565b92915050565b6000819050919050565b6111b8816111a5565b81146111c357600080fd5b50565b6000813590506111d5816111af565b92915050565b6000806000606084860312156111f4576111f3610f6a565b5b600084013567ffffffffffffffff81111561121257611211610f6f565b5b61121e8682870161114f565b935050602061122f86828701611190565b9250506040611240868287016111c6565b9150509250925092565b60008115159050919050565b61125f8161124a565b82525050565b600060208201905061127a6000830184611256565b92915050565b600080fd5b600080fd5b6000808585111561129e5761129d611280565b5b838611156112af576112ae611285565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006112e983836112c5565b826112f4813561116f565b925060208210156113345761132f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026112d0565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611376826111a5565b9150611381836111a5565b92508282019050808211156113995761139861133c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d9826111a5565b91506113e4836111a5565b9250826113f4576113f361139f565b5b828204905092915050565b600061140a826111a5565b9150611415836111a5565b9250828202611423816111a5565b9150828204841483151761143a5761143961133c565b5b5092915050565b600082825260208201905092915050565b7f696e76616c696420646174610000000000000000000000000000000000000000600082015250565b6000611488600c83611441565b915061149382611452565b602082019050919050565b600060208201905081810360008301526114b78161147b565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006114f4601183611441565b91506114ff826114be565b602082019050919050565b60006020820190508181036000830152611523816114e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115565761155561152a565b5b80840192508235915067ffffffffffffffff8211156115785761157761152f565b5b60208301925060018202360383131561159457611593611534565b5b509250929050565b60006115a7826111a5565b91506115b2836111a5565b92508282039050818111156115ca576115c961133c565b5b92915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061160883836112c5565b8261161381356115d0565b925060148210156116535761164e7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026112d0565b831692505b505092915050565b7f73657373696f6e206b6579207265766f6b656400000000000000000000000000600082015250565b6000611691601383611441565b915061169c8261165b565b602082019050919050565b600060208201905081810360008301526116c081611684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b600061170d83856116f6565b935061171a8385846110c2565b82840190509392505050565b6000611733828486611701565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611777826110d1565b810181811067ffffffffffffffff821117156117965761179561173f565b5b80604052505050565b60006117a9610f60565b90506117b5828261176e565b919050565b600067ffffffffffffffff8211156117d5576117d461173f565b5b602082029050602081019050919050565b60006117f96117f4846117ba565b61179f565b9050808382526020820190506020840283018581111561181c5761181b611009565b5b835b8181101561184557806118318882611190565b84526020840193505060208101905061181e565b5050509392505050565b600082601f83011261186457611863610fff565b5b81356118748482602086016117e6565b91505092915050565b60006020828403121561189357611892610f6a565b5b600082013567ffffffffffffffff8111156118b1576118b0610f6f565b5b6118bd8482850161184f565b91505092915050565b7f696e76616c69642073657373696f6e206b657900000000000000000000000000600082015250565b60006118fc601383611441565b9150611907826118c6565b602082019050919050565b6000602082019050818103600083015261192b816118ef565b9050919050565b600061193f828486611701565b91508190509392505050565b7f696e76616c696465206d65726b6c6520726f6f74000000000000000000000000600082015250565b6000611981601483611441565b915061198c8261194b565b602082019050919050565b600060208201905081810360008301526119b081611974565b9050919050565b6119c08161116f565b82525050565b6119cf816111a5565b82525050565b60006060820190506119ea60008301866119b7565b6119f760208301856119b7565b611a0460408301846119c6565b949350505050565b7f6163636f756e743a20696e76616c6964207369676e6174757265000000000000600082015250565b6000611a42601a83611441565b9150611a4d82611a0c565b602082019050919050565b60006020820190508181036000830152611a7181611a35565b9050919050565b6000611a83826111a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ab557611ab461133c565b5b600182019050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611b01600283611ac0565b9150611b0c82611acb565b600282019050919050565b6000819050919050565b611b32611b2d8261116f565b611b17565b82525050565b6000611b4382611af4565b9150611b4f8285611b21565b602082019150611b5f8284611b21565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611bd4601883611441565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611c40601f83611441565b9150611c4b82611c0a565b602082019050919050565b60006020820190508181036000830152611c6f81611c33565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cd2602283611441565b9150611cdd82611c76565b604082019050919050565b60006020820190508181036000830152611d0181611cc5565b9050919050565b611d1181610f94565b82525050565b600060a082019050611d2c60008301886119b7565b611d3960208301876119b7565b611d4660408301866119b7565b611d5360608301856119c6565b611d606080830184611d08565b9695505050505050565b600060ff82169050919050565b611d8081611d6a565b82525050565b6000608082019050611d9b60008301876119b7565b611da86020830186611d77565b611db560408301856119b7565b611dc260608301846119b7565b9594505050505056fea26469706673582212205d61a7056fe6bfe6f67806ccdffcd495a3b016728c92d497f976c9d84670b56a64736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/polygon/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json b/deployments/polygon/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json deleted file mode 100644 index 7cdf9e6e..00000000 --- a/deployments/polygon/solcInputs/d5c4a417af7f759d03a3c7da438dc2be.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "lib/account-abstraction/contracts/core/EntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n\nimport \"../interfaces/IAccount.sol\";\nimport \"../interfaces/IPaymaster.sol\";\nimport \"../interfaces/IEntryPoint.sol\";\n\nimport \"../utils/Exec.sol\";\nimport \"./StakeManager.sol\";\nimport \"./SenderCreator.sol\";\nimport \"./Helpers.sol\";\nimport \"./NonceManager.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract EntryPoint is IEntryPoint, StakeManager, NonceManager, ReentrancyGuard {\n\n using UserOperationLib for UserOperation;\n\n SenderCreator private immutable senderCreator = new SenderCreator();\n\n // internal value used during simulation: need to query aggregator.\n address private constant SIMULATE_FIND_AGGREGATOR = address(1);\n\n // marker for inner call revert on out of gas\n bytes32 private constant INNER_OUT_OF_GAS = hex'deaddead';\n\n uint256 private constant REVERT_REASON_MAX_LEN = 2048;\n\n /**\n * for simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value\n * in case of signature failure, instead of revert.\n */\n uint256 public constant SIG_VALIDATION_FAILED = 1;\n\n /**\n * compensate the caller's beneficiary address with the collected fees of all UserOperations.\n * @param beneficiary the address to receive the fees\n * @param amount amount to transfer.\n */\n function _compensate(address payable beneficiary, uint256 amount) internal {\n require(beneficiary != address(0), \"AA90 invalid beneficiary\");\n (bool success,) = beneficiary.call{value : amount}(\"\");\n require(success, \"AA91 failed send to beneficiary\");\n }\n\n /**\n * execute a user op\n * @param opIndex index into the opInfo array\n * @param userOp the userOp to execute\n * @param opInfo the opInfo filled by validatePrepayment for this userOp.\n * @return collected the total amount this userOp paid.\n */\n function _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n uint256 preGas = gasleft();\n bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n collected = _actualGasCost;\n } catch {\n bytes32 innerRevertCode;\n assembly {\n returndatacopy(0, 0, 32)\n innerRevertCode := mload(0)\n }\n // handleOps was called with gas limit too low. abort entire bundle.\n if (innerRevertCode == INNER_OUT_OF_GAS) {\n //report paymaster, since if it is not deliberately caused by the bundler,\n // it must be a revert caused by paymaster.\n revert FailedOp(opIndex, \"AA95 out of gas\");\n }\n\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n }\n }\n\n /**\n * Execute a batch of UserOperations.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant {\n\n uint256 opslen = ops.length;\n UserOpInfo[] memory opInfos = new UserOpInfo[](opslen);\n\n unchecked {\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[i];\n (uint256 validationData, uint256 pmValidationData) = _validatePrepayment(i, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, pmValidationData, address(0));\n }\n\n uint256 collected = 0;\n emit BeforeExecution();\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(i, ops[i], opInfos[i]);\n }\n\n _compensate(beneficiary, collected);\n } //unchecked\n }\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) public nonReentrant {\n\n uint256 opasLen = opsPerAggregator.length;\n uint256 totalOps = 0;\n for (uint256 i = 0; i < opasLen; i++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[i];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n //address(1) is special marker of \"signature error\"\n require(address(aggregator) != address(1), \"AA96 invalid aggregator\");\n\n if (address(aggregator) != address(0)) {\n // solhint-disable-next-line no-empty-blocks\n try aggregator.validateSignatures(ops, opa.signature) {}\n catch {\n revert SignatureValidationFailed(address(aggregator));\n }\n }\n\n totalOps += ops.length;\n }\n\n UserOpInfo[] memory opInfos = new UserOpInfo[](totalOps);\n\n emit BeforeExecution();\n\n uint256 opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n UserOperation[] calldata ops = opa.userOps;\n IAggregator aggregator = opa.aggregator;\n\n uint256 opslen = ops.length;\n for (uint256 i = 0; i < opslen; i++) {\n UserOpInfo memory opInfo = opInfos[opIndex];\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(opIndex, ops[i], opInfo);\n _validateAccountAndPaymasterValidationData(i, validationData, paymasterValidationData, address(aggregator));\n opIndex++;\n }\n }\n\n uint256 collected = 0;\n opIndex = 0;\n for (uint256 a = 0; a < opasLen; a++) {\n UserOpsPerAggregator calldata opa = opsPerAggregator[a];\n emit SignatureAggregatorChanged(address(opa.aggregator));\n UserOperation[] calldata ops = opa.userOps;\n uint256 opslen = ops.length;\n\n for (uint256 i = 0; i < opslen; i++) {\n collected += _executeUserOp(opIndex, ops[i], opInfos[opIndex]);\n opIndex++;\n }\n }\n emit SignatureAggregatorChanged(address(0));\n\n _compensate(beneficiary, collected);\n }\n\n /// @inheritdoc IEntryPoint\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external override {\n\n UserOpInfo memory opInfo;\n _simulationOnlyValidations(op);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, op, opInfo);\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n\n numberMarker();\n uint256 paid = _executeUserOp(0, op, opInfo);\n numberMarker();\n bool targetSuccess;\n bytes memory targetResult;\n if (target != address(0)) {\n (targetSuccess, targetResult) = target.call(targetCallData);\n }\n revert ExecutionResult(opInfo.preOpGas, paid, data.validAfter, data.validUntil, targetSuccess, targetResult);\n }\n\n\n // A memory copy of UserOp static fields only.\n // Excluding: callData, initCode and signature. Replacing paymasterAndData with paymaster.\n struct MemoryUserOp {\n address sender;\n uint256 nonce;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n address paymaster;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n }\n\n struct UserOpInfo {\n MemoryUserOp mUserOp;\n bytes32 userOpHash;\n uint256 prefund;\n uint256 contextOffset;\n uint256 preOpGas;\n }\n\n /**\n * inner function to handle a UserOperation.\n * Must be declared \"external\" to open a call context, but it can only be called by handleOps.\n */\n function innerHandleOp(bytes memory callData, UserOpInfo memory opInfo, bytes calldata context) external returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n require(msg.sender == address(this), \"AA92 internal call only\");\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n\n uint callGasLimit = mUserOp.callGasLimit;\n unchecked {\n // handleOps was called with gas limit too low. abort entire bundle.\n if (gasleft() < callGasLimit + mUserOp.verificationGasLimit + 5000) {\n assembly {\n mstore(0, INNER_OUT_OF_GAS)\n revert(0, 32)\n }\n }\n }\n\n IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded;\n if (callData.length > 0) {\n bool success = Exec.call(mUserOp.sender, 0, callData, callGasLimit);\n if (!success) {\n bytes memory result = Exec.getReturnData(REVERT_REASON_MAX_LEN);\n if (result.length > 0) {\n emit UserOperationRevertReason(opInfo.userOpHash, mUserOp.sender, mUserOp.nonce, result);\n }\n mode = IPaymaster.PostOpMode.opReverted;\n }\n }\n\n unchecked {\n uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp)\n return _handlePostOp(0, mode, opInfo, context, actualGas);\n }\n }\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) public view returns (bytes32) {\n return keccak256(abi.encode(userOp.hash(), address(this), block.chainid));\n }\n\n /**\n * copy general fields from userOp into the memory opInfo structure.\n */\n function _copyUserOpToMemory(UserOperation calldata userOp, MemoryUserOp memory mUserOp) internal pure {\n mUserOp.sender = userOp.sender;\n mUserOp.nonce = userOp.nonce;\n mUserOp.callGasLimit = userOp.callGasLimit;\n mUserOp.verificationGasLimit = userOp.verificationGasLimit;\n mUserOp.preVerificationGas = userOp.preVerificationGas;\n mUserOp.maxFeePerGas = userOp.maxFeePerGas;\n mUserOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes calldata paymasterAndData = userOp.paymasterAndData;\n if (paymasterAndData.length > 0) {\n require(paymasterAndData.length >= 20, \"AA93 invalid paymasterAndData\");\n mUserOp.paymaster = address(bytes20(paymasterAndData[: 20]));\n } else {\n mUserOp.paymaster = address(0);\n }\n }\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external {\n UserOpInfo memory outOpInfo;\n\n _simulationOnlyValidations(userOp);\n (uint256 validationData, uint256 paymasterValidationData) = _validatePrepayment(0, userOp, outOpInfo);\n StakeInfo memory paymasterInfo = _getStakeInfo(outOpInfo.mUserOp.paymaster);\n StakeInfo memory senderInfo = _getStakeInfo(outOpInfo.mUserOp.sender);\n StakeInfo memory factoryInfo;\n {\n bytes calldata initCode = userOp.initCode;\n address factory = initCode.length >= 20 ? address(bytes20(initCode[0 : 20])) : address(0);\n factoryInfo = _getStakeInfo(factory);\n }\n\n ValidationData memory data = _intersectTimeRange(validationData, paymasterValidationData);\n address aggregator = data.aggregator;\n bool sigFailed = aggregator == address(1);\n ReturnInfo memory returnInfo = ReturnInfo(outOpInfo.preOpGas, outOpInfo.prefund,\n sigFailed, data.validAfter, data.validUntil, getMemoryBytesFromOffset(outOpInfo.contextOffset));\n\n if (aggregator != address(0) && aggregator != address(1)) {\n AggregatorStakeInfo memory aggregatorInfo = AggregatorStakeInfo(aggregator, _getStakeInfo(aggregator));\n revert ValidationResultWithAggregation(returnInfo, senderInfo, factoryInfo, paymasterInfo, aggregatorInfo);\n }\n revert ValidationResult(returnInfo, senderInfo, factoryInfo, paymasterInfo);\n\n }\n\n function _getRequiredPrefund(MemoryUserOp memory mUserOp) internal pure returns (uint256 requiredPrefund) {\n unchecked {\n //when using a Paymaster, the verificationGasLimit is used also to as a limit for the postOp call.\n // our security model might call postOp eventually twice\n uint256 mul = mUserOp.paymaster != address(0) ? 3 : 1;\n uint256 requiredGas = mUserOp.callGasLimit + mUserOp.verificationGasLimit * mul + mUserOp.preVerificationGas;\n\n requiredPrefund = requiredGas * mUserOp.maxFeePerGas;\n }\n }\n\n // create the sender's contract if needed.\n function _createSenderIfNeeded(uint256 opIndex, UserOpInfo memory opInfo, bytes calldata initCode) internal {\n if (initCode.length != 0) {\n address sender = opInfo.mUserOp.sender;\n if (sender.code.length != 0) revert FailedOp(opIndex, \"AA10 sender already constructed\");\n address sender1 = senderCreator.createSender{gas : opInfo.mUserOp.verificationGasLimit}(initCode);\n if (sender1 == address(0)) revert FailedOp(opIndex, \"AA13 initCode failed or OOG\");\n if (sender1 != sender) revert FailedOp(opIndex, \"AA14 initCode must return sender\");\n if (sender1.code.length == 0) revert FailedOp(opIndex, \"AA15 initCode must create sender\");\n address factory = address(bytes20(initCode[0 : 20]));\n emit AccountDeployed(opInfo.userOpHash, sender, factory, opInfo.mUserOp.paymaster);\n }\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes calldata initCode) public {\n address sender = senderCreator.createSender(initCode);\n revert SenderAddressResult(sender);\n }\n\n function _simulationOnlyValidations(UserOperation calldata userOp) internal view {\n // solhint-disable-next-line no-empty-blocks\n try this._validateSenderAndPaymaster(userOp.initCode, userOp.sender, userOp.paymasterAndData) {}\n catch Error(string memory revertReason) {\n if (bytes(revertReason).length != 0) {\n revert FailedOp(0, revertReason);\n }\n }\n }\n\n /**\n * Called only during simulation.\n * This function always reverts to prevent warm/cold storage differentiation in simulation vs execution.\n */\n function _validateSenderAndPaymaster(bytes calldata initCode, address sender, bytes calldata paymasterAndData) external view {\n if (initCode.length == 0 && sender.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA20 account not deployed\");\n }\n if (paymasterAndData.length >= 20) {\n address paymaster = address(bytes20(paymasterAndData[0 : 20]));\n if (paymaster.code.length == 0) {\n // it would revert anyway. but give a meaningful message\n revert(\"AA30 paymaster not deployed\");\n }\n }\n // always revert\n revert(\"\");\n }\n\n /**\n * call account.validateUserOp.\n * revert (with FailedOp) in case validateUserOp reverts, or account didn't send required prefund.\n * decrement account's deposit if needed\n */\n function _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\n internal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\n unchecked {\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n address sender = mUserOp.sender;\n _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n address paymaster = mUserOp.paymaster;\n numberMarker();\n uint256 missingAccountFunds = 0;\n if (paymaster == address(0)) {\n uint256 bal = balanceOf(sender);\n missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n }\n try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n returns (uint256 _validationData) {\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA23 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA23 reverted (or OOG)\");\n }\n if (paymaster == address(0)) {\n DepositInfo storage senderInfo = deposits[sender];\n uint256 deposit = senderInfo.deposit;\n if (requiredPrefund > deposit) {\n revert FailedOp(opIndex, \"AA21 didn't pay prefund\");\n }\n senderInfo.deposit = uint112(deposit - requiredPrefund);\n }\n gasUsedByValidateAccountPrepayment = preGas - gasleft();\n }\n }\n\n /**\n * In case the request has a paymaster:\n * Validate paymaster has enough deposit.\n * Call paymaster.validatePaymasterUserOp.\n * Revert with proper FailedOp in case paymaster reverts.\n * Decrement paymaster's deposit\n */\n function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPreFund, uint256 gasUsedByValidateAccountPrepayment)\n internal returns (bytes memory context, uint256 validationData) {\n unchecked {\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 verificationGasLimit = mUserOp.verificationGasLimit;\n require(verificationGasLimit > gasUsedByValidateAccountPrepayment, \"AA41 too little verificationGas\");\n uint256 gas = verificationGasLimit - gasUsedByValidateAccountPrepayment;\n\n address paymaster = mUserOp.paymaster;\n DepositInfo storage paymasterInfo = deposits[paymaster];\n uint256 deposit = paymasterInfo.deposit;\n if (deposit < requiredPreFund) {\n revert FailedOp(opIndex, \"AA31 paymaster deposit too low\");\n }\n paymasterInfo.deposit = uint112(deposit - requiredPreFund);\n try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, opInfo.userOpHash, requiredPreFund) returns (bytes memory _context, uint256 _validationData){\n context = _context;\n validationData = _validationData;\n } catch Error(string memory revertReason) {\n revert FailedOp(opIndex, string.concat(\"AA33 reverted: \", revertReason));\n } catch {\n revert FailedOp(opIndex, \"AA33 reverted (or OOG)\");\n }\n }\n }\n\n /**\n * revert if either account validationData or paymaster validationData is expired\n */\n function _validateAccountAndPaymasterValidationData(uint256 opIndex, uint256 validationData, uint256 paymasterValidationData, address expectedAggregator) internal view {\n (address aggregator, bool outOfTimeRange) = _getValidationData(validationData);\n if (expectedAggregator != aggregator) {\n revert FailedOp(opIndex, \"AA24 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA22 expired or not due\");\n }\n //pmAggregator is not a real signature aggregator: we don't have logic to handle it as address.\n // non-zero address means that the paymaster fails due to some signature check (which is ok only during estimation)\n address pmAggregator;\n (pmAggregator, outOfTimeRange) = _getValidationData(paymasterValidationData);\n if (pmAggregator != address(0)) {\n revert FailedOp(opIndex, \"AA34 signature error\");\n }\n if (outOfTimeRange) {\n revert FailedOp(opIndex, \"AA32 paymaster expired or not due\");\n }\n }\n\n function _getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {\n if (validationData == 0) {\n return (address(0), false);\n }\n ValidationData memory data = _parseValidationData(validationData);\n // solhint-disable-next-line not-rely-on-time\n outOfTimeRange = block.timestamp > data.validUntil || block.timestamp < data.validAfter;\n aggregator = data.aggregator;\n }\n\n /**\n * validate account and paymaster (if defined).\n * also make sure total validation doesn't exceed verificationGasLimit\n * this method is called off-chain (simulateValidation()) and on-chain (from handleOps)\n * @param opIndex the index of this userOp into the \"opInfos\" array\n * @param userOp the userOp to validate\n */\n function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\n private returns (uint256 validationData, uint256 paymasterValidationData) {\n\n uint256 preGas = gasleft();\n MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\n _copyUserOpToMemory(userOp, mUserOp);\n outOpInfo.userOpHash = getUserOpHash(userOp);\n\n // validate all numeric values in userOp are well below 128 bit, so they can safely be added\n // and multiplied without causing overflow\n uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\n userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\n require(maxGasValues <= type(uint120).max, \"AA94 gas values overflow\");\n\n uint256 gasUsedByValidateAccountPrepayment;\n (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\n (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\n\n if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\n revert FailedOp(opIndex, \"AA25 invalid account nonce\");\n }\n\n //a \"marker\" where account opcode validation is done and paymaster opcode validation is about to start\n // (used only by off-chain simulateValidation)\n numberMarker();\n\n bytes memory context;\n if (mUserOp.paymaster != address(0)) {\n (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\n }\n unchecked {\n uint256 gasUsed = preGas - gasleft();\n\n if (userOp.verificationGasLimit < gasUsed) {\n revert FailedOp(opIndex, \"AA40 over verificationGasLimit\");\n }\n outOpInfo.prefund = requiredPreFund;\n outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\n outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\n }\n }\n\n /**\n * process post-operation.\n * called just after the callData is executed.\n * if a paymaster is defined and its validation returned a non-empty context, its postOp is called.\n * the excess amount is refunded to the account (or paymaster - if it was used in the request)\n * @param opIndex index in the batch\n * @param mode - whether is called from innerHandleOp, or outside (postOpReverted)\n * @param opInfo userOp fields and info collected during validation\n * @param context the context returned in validatePaymasterUserOp\n * @param actualGas the gas used so far by this user operation\n */\n function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) {\n uint256 preGas = gasleft();\n unchecked {\n address refundAddress;\n MemoryUserOp memory mUserOp = opInfo.mUserOp;\n uint256 gasPrice = getUserOpGasPrice(mUserOp);\n\n address paymaster = mUserOp.paymaster;\n if (paymaster == address(0)) {\n refundAddress = mUserOp.sender;\n } else {\n refundAddress = paymaster;\n if (context.length > 0) {\n actualGasCost = actualGas * gasPrice;\n if (mode != IPaymaster.PostOpMode.postOpReverted) {\n IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost);\n } else {\n // solhint-disable-next-line no-empty-blocks\n try IPaymaster(paymaster).postOp{gas : mUserOp.verificationGasLimit}(mode, context, actualGasCost) {}\n catch Error(string memory reason) {\n revert FailedOp(opIndex, string.concat(\"AA50 postOp reverted: \", reason));\n }\n catch {\n revert FailedOp(opIndex, \"AA50 postOp revert\");\n }\n }\n }\n }\n actualGas += preGas - gasleft();\n actualGasCost = actualGas * gasPrice;\n if (opInfo.prefund < actualGasCost) {\n revert FailedOp(opIndex, \"AA51 prefund below actualGasCost\");\n }\n uint256 refund = opInfo.prefund - actualGasCost;\n _incrementDeposit(refundAddress, refund);\n bool success = mode == IPaymaster.PostOpMode.opSucceeded;\n emit UserOperationEvent(opInfo.userOpHash, mUserOp.sender, mUserOp.paymaster, mUserOp.nonce, success, actualGasCost, actualGas);\n } // unchecked\n }\n\n /**\n * the gas price this UserOp agrees to pay.\n * relayer/block builder might submit the TX with higher priorityFee, but the user should not\n */\n function getUserOpGasPrice(MemoryUserOp memory mUserOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = mUserOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = mUserOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function getOffsetOfMemoryBytes(bytes memory data) internal pure returns (uint256 offset) {\n assembly {offset := data}\n }\n\n function getMemoryBytesFromOffset(uint256 offset) internal pure returns (bytes memory data) {\n assembly {data := offset}\n }\n\n //place the NUMBER opcode in the code.\n // this is used as a marker during simulation, as this OP is completely banned from the simulated code of the\n // account and paymaster.\n function numberMarker() internal view {\n assembly {mstore(0, number())}\n }\n}\n\n" - }, - "lib/account-abstraction/contracts/core/Helpers.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\n/**\n * returned data from validateUserOp.\n * validateUserOp returns a uint256, with is created by `_packedValidationData` and parsed by `_parseValidationData`\n * @param aggregator - address(0) - the account validated the signature by itself.\n * address(1) - the account failed to validate the signature.\n * otherwise - this is an address of a signature aggregator that must be used to validate the signature.\n * @param validAfter - this UserOp is valid only after this timestamp.\n * @param validaUntil - this UserOp is valid only up to this timestamp.\n */\n struct ValidationData {\n address aggregator;\n uint48 validAfter;\n uint48 validUntil;\n }\n\n//extract sigFailed, validAfter, validUntil.\n// also convert zero validUntil to type(uint48).max\n function _parseValidationData(uint validationData) pure returns (ValidationData memory data) {\n address aggregator = address(uint160(validationData));\n uint48 validUntil = uint48(validationData >> 160);\n if (validUntil == 0) {\n validUntil = type(uint48).max;\n }\n uint48 validAfter = uint48(validationData >> (48 + 160));\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n// intersect account and paymaster ranges.\n function _intersectTimeRange(uint256 validationData, uint256 paymasterValidationData) pure returns (ValidationData memory) {\n ValidationData memory accountValidationData = _parseValidationData(validationData);\n ValidationData memory pmValidationData = _parseValidationData(paymasterValidationData);\n address aggregator = accountValidationData.aggregator;\n if (aggregator == address(0)) {\n aggregator = pmValidationData.aggregator;\n }\n uint48 validAfter = accountValidationData.validAfter;\n uint48 validUntil = accountValidationData.validUntil;\n uint48 pmValidAfter = pmValidationData.validAfter;\n uint48 pmValidUntil = pmValidationData.validUntil;\n\n if (validAfter < pmValidAfter) validAfter = pmValidAfter;\n if (validUntil > pmValidUntil) validUntil = pmValidUntil;\n return ValidationData(aggregator, validAfter, validUntil);\n }\n\n/**\n * helper to pack the return value for validateUserOp\n * @param data - the ValidationData to pack\n */\n function _packValidationData(ValidationData memory data) pure returns (uint256) {\n return uint160(data.aggregator) | (uint256(data.validUntil) << 160) | (uint256(data.validAfter) << (160 + 48));\n }\n\n/**\n * helper to pack the return value for validateUserOp, when not using an aggregator\n * @param sigFailed - true for signature failure, false for success\n * @param validUntil last timestamp this UserOperation is valid (or zero for infinite)\n * @param validAfter first timestamp this UserOperation is valid\n */\n function _packValidationData(bool sigFailed, uint48 validUntil, uint48 validAfter) pure returns (uint256) {\n return (sigFailed ? 1 : 0) | (uint256(validUntil) << 160) | (uint256(validAfter) << (160 + 48));\n }\n\n/**\n * keccak function over calldata.\n * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it.\n */\n function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) {\n assembly {\n let mem := mload(0x40)\n let len := data.length\n calldatacopy(mem, data.offset, len)\n ret := keccak256(mem, len)\n }\n }\n\n" - }, - "lib/account-abstraction/contracts/core/NonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IEntryPoint.sol\";\n\n/**\n * nonce management functionality\n */\ncontract NonceManager is INonceManager {\n\n /**\n * The next valid sequence number for a given nonce key.\n */\n mapping(address => mapping(uint192 => uint256)) public nonceSequenceNumber;\n\n function getNonce(address sender, uint192 key)\n public view override returns (uint256 nonce) {\n return nonceSequenceNumber[sender][key] | (uint256(key) << 64);\n }\n\n // allow an account to manually increment its own nonce.\n // (mainly so that during construction nonce can be made non-zero,\n // to \"absorb\" the gas cost of first nonce increment to 1st transaction (construction),\n // not to 2nd transaction)\n function incrementNonce(uint192 key) public override {\n nonceSequenceNumber[msg.sender][key]++;\n }\n\n /**\n * validate nonce uniqueness for this account.\n * called just after validateUserOp()\n */\n function _validateAndUpdateNonce(address sender, uint256 nonce) internal returns (bool) {\n\n uint192 key = uint192(nonce >> 64);\n uint64 seq = uint64(nonce);\n return nonceSequenceNumber[sender][key]++ == seq;\n }\n\n}\n" - }, - "lib/account-abstraction/contracts/core/SenderCreator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/**\n * helper contract for EntryPoint, to call userOp.initCode from a \"neutral\" address,\n * which is explicitly not the entryPoint itself.\n */\ncontract SenderCreator {\n\n /**\n * call the \"initCode\" factory to create and return the sender account address\n * @param initCode the initCode value from a UserOp. contains 20 bytes of factory address, followed by calldata\n * @return sender the returned address of the created account, or zero address on failure.\n */\n function createSender(bytes calldata initCode) external returns (address sender) {\n address factory = address(bytes20(initCode[0 : 20]));\n bytes memory initCallData = initCode[20 :];\n bool success;\n /* solhint-disable no-inline-assembly */\n assembly {\n success := call(gas(), factory, 0, add(initCallData, 0x20), mload(initCallData), 0, 32)\n sender := mload(0)\n }\n if (!success) {\n sender = address(0);\n }\n }\n}\n" - }, - "lib/account-abstraction/contracts/core/StakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\nimport \"../interfaces/IStakeManager.sol\";\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable not-rely-on-time */\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by a paymaster.\n */\nabstract contract StakeManager is IStakeManager {\n\n /// maps paymaster to their deposits and stakes\n mapping(address => DepositInfo) public deposits;\n\n /// @inheritdoc IStakeManager\n function getDepositInfo(address account) public view returns (DepositInfo memory info) {\n return deposits[account];\n }\n\n // internal method to return just the stake info\n function _getStakeInfo(address addr) internal view returns (StakeInfo memory info) {\n DepositInfo storage depositInfo = deposits[addr];\n info.stake = depositInfo.stake;\n info.unstakeDelaySec = depositInfo.unstakeDelaySec;\n }\n\n /// return the deposit (for gas payment) of the account\n function balanceOf(address account) public view returns (uint256) {\n return deposits[account].deposit;\n }\n\n receive() external payable {\n depositTo(msg.sender);\n }\n\n function _incrementDeposit(address account, uint256 amount) internal {\n DepositInfo storage info = deposits[account];\n uint256 newAmount = info.deposit + amount;\n require(newAmount <= type(uint112).max, \"deposit overflow\");\n info.deposit = uint112(newAmount);\n }\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) public payable {\n _incrementDeposit(account, msg.value);\n DepositInfo storage info = deposits[account];\n emit Deposited(account, info.deposit);\n }\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 unstakeDelaySec) public payable {\n DepositInfo storage info = deposits[msg.sender];\n require(unstakeDelaySec > 0, \"must specify unstake delay\");\n require(unstakeDelaySec >= info.unstakeDelaySec, \"cannot decrease unstake time\");\n uint256 stake = info.stake + msg.value;\n require(stake > 0, \"no stake specified\");\n require(stake <= type(uint112).max, \"stake overflow\");\n deposits[msg.sender] = DepositInfo(\n info.deposit,\n true,\n uint112(stake),\n unstakeDelaySec,\n 0\n );\n emit StakeLocked(msg.sender, stake, unstakeDelaySec);\n }\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external {\n DepositInfo storage info = deposits[msg.sender];\n require(info.unstakeDelaySec != 0, \"not staked\");\n require(info.staked, \"already unstaking\");\n uint48 withdrawTime = uint48(block.timestamp) + info.unstakeDelaySec;\n info.withdrawTime = withdrawTime;\n info.staked = false;\n emit StakeUnlocked(msg.sender, withdrawTime);\n }\n\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external {\n DepositInfo storage info = deposits[msg.sender];\n uint256 stake = info.stake;\n require(stake > 0, \"No stake to withdraw\");\n require(info.withdrawTime > 0, \"must call unlockStake() first\");\n require(info.withdrawTime <= block.timestamp, \"Stake withdrawal is not due\");\n info.unstakeDelaySec = 0;\n info.withdrawTime = 0;\n info.stake = 0;\n emit StakeWithdrawn(msg.sender, withdrawAddress, stake);\n (bool success,) = withdrawAddress.call{value : stake}(\"\");\n require(success, \"failed to withdraw stake\");\n }\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external {\n DepositInfo storage info = deposits[msg.sender];\n require(withdrawAmount <= info.deposit, \"Withdraw amount too large\");\n info.deposit = uint112(info.deposit - withdrawAmount);\n emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount);\n (bool success,) = withdrawAddress.call{value : withdrawAmount}(\"\");\n require(success, \"failed to withdraw\");\n }\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAccount.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\ninterface IAccount {\n\n /**\n * Validate user's signature and nonce\n * the entryPoint will make the call to the recipient only if this validation call returns successfully.\n * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).\n * This allows making a \"simulation call\" without a valid signature\n * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\n *\n * @dev Must validate caller is the entryPoint.\n * Must validate the signature and nonce\n * @param userOp the operation that is about to be executed.\n * @param userOpHash hash of the user's request data. can be used as the basis for signature.\n * @param missingAccountFunds missing funds on the account's deposit in the entrypoint.\n * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call.\n * The excess is left as a deposit in the entrypoint, for future calls.\n * can be withdrawn anytime using \"entryPoint.withdrawTo()\"\n * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\n * @return validationData packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure.\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external returns (uint256 validationData);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IAggregator.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * Aggregated Signatures validator.\n */\ninterface IAggregator {\n\n /**\n * validate aggregated signature.\n * revert if the aggregated signature does not match the given list of operations.\n */\n function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) external view;\n\n /**\n * validate signature of a single userOp\n * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation\n * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.\n * @param userOp the userOperation received from the user.\n * @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.\n * (usually empty, unless account and aggregator support some kind of \"multisig\"\n */\n function validateUserOpSignature(UserOperation calldata userOp)\n external view returns (bytes memory sigForUserOp);\n\n /**\n * aggregate multiple signatures into a single value.\n * This method is called off-chain to calculate the signature to pass with handleOps()\n * bundler MAY use optimized custom code perform this aggregation\n * @param userOps array of UserOperations to collect the signatures from.\n * @return aggregatedSignature the aggregated signature\n */\n function aggregateSignatures(UserOperation[] calldata userOps) external view returns (bytes memory aggregatedSignature);\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": { - "content": "/**\n ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation.\n ** Only one instance required on each chain.\n **/\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./UserOperation.sol\";\nimport \"./IStakeManager.sol\";\nimport \"./IAggregator.sol\";\nimport \"./INonceManager.sol\";\n\ninterface IEntryPoint is IStakeManager, INonceManager {\n\n /***\n * An event emitted after each successful request\n * @param userOpHash - unique identifier for the request (hash its entire content, except signature).\n * @param sender - the account that generates this request.\n * @param paymaster - if non-null, the paymaster that pays for this request.\n * @param nonce - the nonce value from the request.\n * @param success - true if the sender transaction succeeded, false if reverted.\n * @param actualGasCost - actual amount paid (by account or paymaster) for this UserOperation.\n * @param actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution).\n */\n event UserOperationEvent(bytes32 indexed userOpHash, address indexed sender, address indexed paymaster, uint256 nonce, bool success, uint256 actualGasCost, uint256 actualGasUsed);\n\n /**\n * account \"sender\" was deployed.\n * @param userOpHash the userOp that deployed this account. UserOperationEvent will follow.\n * @param sender the account that is deployed\n * @param factory the factory used to deploy this account (in the initCode)\n * @param paymaster the paymaster used by this UserOp\n */\n event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);\n\n /**\n * An event emitted if the UserOperation \"callData\" reverted with non-zero length\n * @param userOpHash the request unique identifier.\n * @param sender the sender of this request\n * @param nonce the nonce used in the request\n * @param revertReason - the return bytes from the (reverted) call to \"callData\".\n */\n event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);\n\n /**\n * an event emitted by handleOps(), before starting the execution loop.\n * any event emitted before this event, is part of the validation.\n */\n event BeforeExecution();\n\n /**\n * signature aggregator used by the following UserOperationEvents within this bundle.\n */\n event SignatureAggregatorChanged(address indexed aggregator);\n\n /**\n * a custom revert error of handleOps, to identify the offending op.\n * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it.\n * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero)\n * @param reason - revert reason\n * The string starts with a unique code \"AAmn\", where \"m\" is \"1\" for factory, \"2\" for account and \"3\" for paymaster issues,\n * so a failure can be attributed to the correct entity.\n * Should be caught in off-chain handleOps simulation and not happen on-chain.\n * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.\n */\n error FailedOp(uint256 opIndex, string reason);\n\n /**\n * error case when a signature aggregator fails to verify the aggregated signature it had created.\n */\n error SignatureValidationFailed(address aggregator);\n\n /**\n * Successful result from simulateValidation.\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n */\n error ValidationResult(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo);\n\n /**\n * Successful result from simulateValidation, if the account returns a signature aggregator\n * @param returnInfo gas and time-range returned values\n * @param senderInfo stake information about the sender\n * @param factoryInfo stake information about the factory (if any)\n * @param paymasterInfo stake information about the paymaster (if any)\n * @param aggregatorInfo signature aggregation info (if the account requires signature aggregator)\n * bundler MUST use it to verify the signature, or reject the UserOperation\n */\n error ValidationResultWithAggregation(ReturnInfo returnInfo,\n StakeInfo senderInfo, StakeInfo factoryInfo, StakeInfo paymasterInfo,\n AggregatorStakeInfo aggregatorInfo);\n\n /**\n * return value of getSenderAddress\n */\n error SenderAddressResult(address sender);\n\n /**\n * return value of simulateHandleOp\n */\n error ExecutionResult(uint256 preOpGas, uint256 paid, uint48 validAfter, uint48 validUntil, bool targetSuccess, bytes targetResult);\n\n //UserOps handled, per aggregator\n struct UserOpsPerAggregator {\n UserOperation[] userOps;\n\n // aggregator address\n IAggregator aggregator;\n // aggregated signature\n bytes signature;\n }\n\n /**\n * Execute a batch of UserOperation.\n * no signature aggregator is used.\n * if any account requires an aggregator (that is, it returned an aggregator when\n * performing simulateValidation), then handleAggregatedOps() must be used instead.\n * @param ops the operations to execute\n * @param beneficiary the address to receive the fees\n */\n function handleOps(UserOperation[] calldata ops, address payable beneficiary) external;\n\n /**\n * Execute a batch of UserOperation with Aggregators\n * @param opsPerAggregator the operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts)\n * @param beneficiary the address to receive the fees\n */\n function handleAggregatedOps(\n UserOpsPerAggregator[] calldata opsPerAggregator,\n address payable beneficiary\n ) external;\n\n /**\n * generate a request Id - unique identifier for this request.\n * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.\n */\n function getUserOpHash(UserOperation calldata userOp) external view returns (bytes32);\n\n /**\n * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.\n * @dev this method always revert. Successful result is ValidationResult error. other errors are failures.\n * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the account's data.\n * @param userOp the user operation to validate.\n */\n function simulateValidation(UserOperation calldata userOp) external;\n\n /**\n * gas and return values during simulation\n * @param preOpGas the gas used for validation (including preValidationGas)\n * @param prefund the required prefund for this operation\n * @param sigFailed validateUserOp's (or paymaster's) signature check failed\n * @param validAfter - first timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param validUntil - last timestamp this UserOp is valid (merging account and paymaster time-range)\n * @param paymasterContext returned by validatePaymasterUserOp (to be passed into postOp)\n */\n struct ReturnInfo {\n uint256 preOpGas;\n uint256 prefund;\n bool sigFailed;\n uint48 validAfter;\n uint48 validUntil;\n bytes paymasterContext;\n }\n\n /**\n * returned aggregated signature info.\n * the aggregator returned by the account, and its current stake.\n */\n struct AggregatorStakeInfo {\n address aggregator;\n StakeInfo stakeInfo;\n }\n\n /**\n * Get counterfactual sender address.\n * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.\n * this method always revert, and returns the address in SenderAddressResult error\n * @param initCode the constructor code to be passed into the UserOperation.\n */\n function getSenderAddress(bytes memory initCode) external;\n\n\n /**\n * simulate full execution of a UserOperation (including both validation and target execution)\n * this method will always revert with \"ExecutionResult\".\n * it performs full validation of the UserOperation, but ignores signature error.\n * an optional target address is called after the userop succeeds, and its value is returned\n * (before the entire call is reverted)\n * Note that in order to collect the the success/failure of the target call, it must be executed\n * with trace enabled to track the emitted events.\n * @param op the UserOperation to simulate\n * @param target if nonzero, a target address to call after userop simulation. If called, the targetSuccess and targetResult\n * are set to the return from that call.\n * @param targetCallData callData to pass to target address\n */\n function simulateHandleOp(UserOperation calldata op, address target, bytes calldata targetCallData) external;\n}\n\n" - }, - "lib/account-abstraction/contracts/interfaces/INonceManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\ninterface INonceManager {\n\n /**\n * Return the next nonce for this sender.\n * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)\n * But UserOp with different keys can come with arbitrary order.\n *\n * @param sender the account address\n * @param key the high 192 bit of the nonce\n * @return nonce a full nonce to pass for next UserOp with this sender.\n */\n function getNonce(address sender, uint192 key)\n external view returns (uint256 nonce);\n\n /**\n * Manually increment the nonce of the sender.\n * This method is exposed just for completeness..\n * Account does NOT need to call it, neither during validation, nor elsewhere,\n * as the EntryPoint will update the nonce regardless.\n * Possible use-case is call it with various keys to \"initialize\" their nonces to one, so that future\n * UserOperations will not pay extra for the first transaction with a given key.\n */\n function incrementNonce(uint192 key) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IPaymaster.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\nimport \"./UserOperation.sol\";\n\n/**\n * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.\n * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.\n */\ninterface IPaymaster {\n\n enum PostOpMode {\n opSucceeded, // user op succeeded\n opReverted, // user op reverted. still has to pay for gas.\n postOpReverted //user op succeeded, but caused postOp to revert. Now it's a 2nd call, after user's op was deliberately reverted.\n }\n\n /**\n * payment validation: check if paymaster agrees to pay.\n * Must verify sender is the entryPoint.\n * Revert to reject this request.\n * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted)\n * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\n * @param userOp the user operation\n * @param userOpHash hash of the user's request data.\n * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp)\n * @return context value to send to a postOp\n * zero length to signify postOp is not required.\n * @return validationData signature and time-range of this operation, encoded the same as the return value of validateUserOperation\n * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,\n * otherwise, an address of an \"authorizer\" contract.\n * <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\"\n * <6-byte> validAfter - first timestamp this operation is valid\n * Note that the validation code cannot use block.timestamp (or block.number) directly.\n */\n function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)\n external returns (bytes memory context, uint256 validationData);\n\n /**\n * post-operation handler.\n * Must verify sender is the entryPoint\n * @param mode enum with the following options:\n * opSucceeded - user operation succeeded.\n * opReverted - user op reverted. still has to pay for gas.\n * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.\n * Now this is the 2nd call, after user's op was deliberately reverted.\n * @param context - the context value returned by validatePaymasterUserOp\n * @param actualGasCost - actual gas used so far (without this postOp call).\n */\n function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity ^0.8.12;\n\n/**\n * manage deposits and stakes.\n * deposit is just a balance used to pay for UserOperations (either by a paymaster or an account)\n * stake is value locked for at least \"unstakeDelay\" by the staked entity.\n */\ninterface IStakeManager {\n\n event Deposited(\n address indexed account,\n uint256 totalDeposit\n );\n\n event Withdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /// Emitted when stake or unstake delay are modified\n event StakeLocked(\n address indexed account,\n uint256 totalStaked,\n uint256 unstakeDelaySec\n );\n\n /// Emitted once a stake is scheduled for withdrawal\n event StakeUnlocked(\n address indexed account,\n uint256 withdrawTime\n );\n\n event StakeWithdrawn(\n address indexed account,\n address withdrawAddress,\n uint256 amount\n );\n\n /**\n * @param deposit the entity's deposit\n * @param staked true if this entity is staked.\n * @param stake actual amount of ether staked for this entity.\n * @param unstakeDelaySec minimum delay to withdraw the stake.\n * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked\n * @dev sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps)\n * and the rest fit into a 2nd cell.\n * 112 bit allows for 10^15 eth\n * 48 bit for full timestamp\n * 32 bit allows 150 years for unstake delay\n */\n struct DepositInfo {\n uint112 deposit;\n bool staked;\n uint112 stake;\n uint32 unstakeDelaySec;\n uint48 withdrawTime;\n }\n\n //API struct used by getStakeInfo and simulateValidation\n struct StakeInfo {\n uint256 stake;\n uint256 unstakeDelaySec;\n }\n\n /// @return info - full deposit information of given account\n function getDepositInfo(address account) external view returns (DepositInfo memory info);\n\n /// @return the deposit (for gas payment) of the account\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * add to the deposit of the given account\n */\n function depositTo(address account) external payable;\n\n /**\n * add to the account's stake - amount and delay\n * any pending unstake is first cancelled.\n * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn.\n */\n function addStake(uint32 _unstakeDelaySec) external payable;\n\n /**\n * attempt to unlock the stake.\n * the value can be withdrawn (using withdrawStake) after the unstake delay.\n */\n function unlockStake() external;\n\n /**\n * withdraw from the (unlocked) stake.\n * must first call unlockStake and wait for the unstakeDelay to pass\n * @param withdrawAddress the address to send withdrawn value.\n */\n function withdrawStake(address payable withdrawAddress) external;\n\n /**\n * withdraw from the deposit.\n * @param withdrawAddress the address to send withdrawn value.\n * @param withdrawAmount the amount to withdraw.\n */\n function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;\n}\n" - }, - "lib/account-abstraction/contracts/interfaces/UserOperation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.12;\n\n/* solhint-disable no-inline-assembly */\n\nimport {calldataKeccak} from \"../core/Helpers.sol\";\n\n/**\n * User Operation struct\n * @param sender the sender account of this request.\n * @param nonce unique value the sender uses to verify it is not a replay.\n * @param initCode if set, the account contract will be created by this constructor/\n * @param callData the method call to execute on this account.\n * @param callGasLimit the gas limit passed to the callData method call.\n * @param verificationGasLimit gas used for validateUserOp and validatePaymasterUserOp.\n * @param preVerificationGas gas not calculated by the handleOps method, but added to the gas paid. Covers batch overhead.\n * @param maxFeePerGas same as EIP-1559 gas parameter.\n * @param maxPriorityFeePerGas same as EIP-1559 gas parameter.\n * @param paymasterAndData if set, this field holds the paymaster address and paymaster-specific data. the paymaster will pay for the transaction instead of the sender.\n * @param signature sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\n struct UserOperation {\n\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n uint256 callGasLimit;\n uint256 verificationGasLimit;\n uint256 preVerificationGas;\n uint256 maxFeePerGas;\n uint256 maxPriorityFeePerGas;\n bytes paymasterAndData;\n bytes signature;\n }\n\n/**\n * Utility functions helpful when working with UserOperation structs.\n */\nlibrary UserOperationLib {\n\n function getSender(UserOperation calldata userOp) internal pure returns (address) {\n address data;\n //read sender from userOp, which is first userOp member (saves 800 gas...)\n assembly {data := calldataload(userOp)}\n return address(uint160(data));\n }\n\n //relayer/block builder might submit the TX with higher priorityFee, but the user should not\n // pay above what he signed for.\n function gasPrice(UserOperation calldata userOp) internal view returns (uint256) {\n unchecked {\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n if (maxFeePerGas == maxPriorityFeePerGas) {\n //legacy mode (for networks that don't support basefee opcode)\n return maxFeePerGas;\n }\n return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee);\n }\n }\n\n function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {\n address sender = getSender(userOp);\n uint256 nonce = userOp.nonce;\n bytes32 hashInitCode = calldataKeccak(userOp.initCode);\n bytes32 hashCallData = calldataKeccak(userOp.callData);\n uint256 callGasLimit = userOp.callGasLimit;\n uint256 verificationGasLimit = userOp.verificationGasLimit;\n uint256 preVerificationGas = userOp.preVerificationGas;\n uint256 maxFeePerGas = userOp.maxFeePerGas;\n uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas;\n bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData);\n\n return abi.encode(\n sender, nonce,\n hashInitCode, hashCallData,\n callGasLimit, verificationGasLimit, preVerificationGas,\n maxFeePerGas, maxPriorityFeePerGas,\n hashPaymasterAndData\n );\n }\n\n function hash(UserOperation calldata userOp) internal pure returns (bytes32) {\n return keccak256(pack(userOp));\n }\n\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n}\n" - }, - "lib/account-abstraction/contracts/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n\n function call(\n address to,\n uint256 value,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function staticcall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal view returns (bool success) {\n assembly {\n success := staticcall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n function delegateCall(\n address to,\n bytes memory data,\n uint256 txGas\n ) internal returns (bool success) {\n assembly {\n success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n }\n }\n\n // get returned data from last call or calldelegate\n function getReturnData(uint256 maxLen) internal pure returns (bytes memory returnData) {\n assembly {\n let len := returndatasize()\n if gt(len, maxLen) {\n len := maxLen\n }\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n // revert with explicit byte array (probably reverted info from call)\n function revertWithData(bytes memory returnData) internal pure {\n assembly {\n revert(add(returnData, 32), mload(returnData))\n }\n }\n\n function callAndRevert(address to, bytes memory data, uint256 maxLen) internal {\n bool success = call(to,0,data,gasleft());\n if (!success) {\n revertWithData(getReturnData(maxLen));\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Create2.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address addr) {\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates merkle trees that are safe\n * against this attack out of the box.\n */\nlibrary MerkleProof {\n /**\n * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n * defined by `root`. For this, a `proof` must be provided, containing\n * sibling hashes on the branch from the leaf to the root of the tree. Each\n * pair of leaves and each pair of pre-images are assumed to be sorted.\n */\n function verify(\n bytes32[] memory proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProof(proof, leaf) == root;\n }\n\n /**\n * @dev Calldata version of {verify}\n *\n * _Available since v4.7._\n */\n function verifyCalldata(\n bytes32[] calldata proof,\n bytes32 root,\n bytes32 leaf\n ) internal pure returns (bool) {\n return processProofCalldata(proof, leaf) == root;\n }\n\n /**\n * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n * hash matches the root of the tree. When processing the proof, the pairs\n * of leafs & pre-images are assumed to be sorted.\n *\n * _Available since v4.4._\n */\n function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Calldata version of {processProof}\n *\n * _Available since v4.7._\n */\n function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n bytes32 computedHash = leaf;\n for (uint256 i = 0; i < proof.length; i++) {\n computedHash = _hashPair(computedHash, proof[i]);\n }\n return computedHash;\n }\n\n /**\n * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by\n * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerify(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProof(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Calldata version of {multiProofVerify}\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function multiProofVerifyCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32 root,\n bytes32[] memory leaves\n ) internal pure returns (bool) {\n return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n }\n\n /**\n * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n * respectively.\n *\n * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n *\n * _Available since v4.7._\n */\n function processMultiProof(\n bytes32[] memory proof,\n bool[] memory proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n /**\n * @dev Calldata version of {processMultiProof}.\n *\n * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.\n *\n * _Available since v4.7._\n */\n function processMultiProofCalldata(\n bytes32[] calldata proof,\n bool[] calldata proofFlags,\n bytes32[] memory leaves\n ) internal pure returns (bytes32 merkleRoot) {\n // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by\n // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n // the merkle tree.\n uint256 leavesLen = leaves.length;\n uint256 totalHashes = proofFlags.length;\n\n // Check proof validity.\n require(leavesLen + proof.length - 1 == totalHashes, \"MerkleProof: invalid multiproof\");\n\n // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n bytes32[] memory hashes = new bytes32[](totalHashes);\n uint256 leafPos = 0;\n uint256 hashPos = 0;\n uint256 proofPos = 0;\n // At each step, we compute the next hash using two values:\n // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n // get the next hash.\n // - depending on the flag, either another value for the \"main queue\" (merging branches) or an element from the\n // `proof` array.\n for (uint256 i = 0; i < totalHashes; i++) {\n bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];\n hashes[i] = _hashPair(a, b);\n }\n\n if (totalHashes > 0) {\n return hashes[totalHashes - 1];\n } else if (leavesLen > 0) {\n return leaves[0];\n } else {\n return proof[0];\n }\n }\n\n function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {\n return a < b ? _efficientHash(a, b) : _efficientHash(b, a);\n }\n\n function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, a)\n mstore(0x20, b)\n value := keccak256(0x00, 0x40)\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" - }, - "src/abstract/Compatibility.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Compatibility {\n receive() external payable {}\n\n function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC721Received.selector;\n }\n\n function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)\n external\n pure\n returns (bytes4)\n {\n return this.onERC1155BatchReceived.selector;\n }\n\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view virtual returns (bytes4);\n}\n" - }, - "src/abstract/KernelStorage.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\n\nstruct WalletKernelStorage {\n address owner;\n}\n\ncontract KernelStorage {\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n IEntryPoint public immutable entryPoint;\n\n event Upgraded(address indexed newImplementation);\n\n // modifier for checking if the sender is the entrypoint or\n // the account itself\n modifier onlyFromEntryPointOrOwnerOrSelf() {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner || msg.sender == address(this),\n \"account: not from entrypoint or owner or self\"\n );\n _;\n }\n\n constructor(IEntryPoint _entryPoint) {\n entryPoint = _entryPoint;\n getKernelStorage().owner = address(1);\n }\n /// @notice get wallet kernel storage\n /// @dev used to get wallet kernel storage\n /// @return ws wallet kernel storage, consists of owner and nonces\n\n function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {\n bytes32 storagePosition = bytes32(uint256(keccak256(\"zerodev.kernel\")) - 1);\n assembly {\n ws.slot := storagePosition\n }\n }\n\n function getOwner() external view returns (address) {\n return getKernelStorage().owner;\n }\n\n function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf {\n bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n assembly {\n sstore(slot, _newImplementation)\n }\n emit Upgraded(_newImplementation);\n }\n\n function transferOwnership(address _newOwner) external onlyFromEntryPointOrOwnerOrSelf {\n getKernelStorage().owner = _newOwner;\n }\n\n function getNonce() public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), 0);\n }\n\n function getNonce(uint192 key) public view virtual returns (uint256) {\n return entryPoint.getNonce(address(this), key);\n }\n}\n " - }, - "src/factory/AccountFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./EIP1967Proxy.sol\";\nimport \"./MinimalAccount.sol\";\n\ncontract AccountFactory {\n MinimalAccount public immutable accountTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n accountTemplate = new MinimalAccount(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(accountTemplate), abi.encodeWithSelector(MinimalAccount.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(accountTemplate), abi.encodeCall(MinimalAccount.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/factory/EIP1967Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract EIP1967Proxy {\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n constructor(address _logic, bytes memory _data) payable {\n require(_logic != address(0), \"EIP1967Proxy: implementation is the zero address\");\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n sstore(slot, _logic)\n }\n if (_data.length > 0) {\n (bool success,) = _logic.delegatecall(_data);\n require(success, \"EIP1967Proxy: constructor call failed\");\n }\n }\n\n fallback() external payable {\n address implementation = _implementation();\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n function _implementation() internal view returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n assembly {\n impl := sload(slot)\n }\n }\n}\n" - }, - "src/factory/MinimalAccount.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"account-abstraction/interfaces/UserOperation.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"src/utils/Exec.sol\";\nimport \"src/abstract/KernelStorage.sol\";\nimport \"src/abstract/Compatibility.sol\";\n\ncontract MinimalAccount is IAccount, KernelStorage, Compatibility {\n error InvalidNonce();\n\n constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}\n\n function initialize(address _owner) external {\n require(getKernelStorage().owner == address(0), \"Already initialized\");\n getKernelStorage().owner = _owner;\n }\n\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)\n external\n returns (uint256)\n {\n require(msg.sender == address(entryPoint), \"account: not from entrypoint\");\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n\n if (missingFunds > 0) {\n (bool success,) = msg.sender.call{value: missingFunds}(\"\");\n (success);\n }\n return 0;\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/Kernel.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"./plugin/IPlugin.sol\";\nimport \"account-abstraction/core/Helpers.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport {EntryPoint} from \"account-abstraction/core/EntryPoint.sol\";\nimport \"./utils/Exec.sol\";\nimport \"./abstract/Compatibility.sol\";\nimport \"./abstract/KernelStorage.sol\";\n\n/// @title Kernel\n/// @author taek\n/// @notice wallet kernel for minimal wallet functionality\n/// @dev supports only 1 owner, multiple plugins\ncontract Kernel is IAccount, EIP712, Compatibility, KernelStorage {\n error InvalidNonce();\n error InvalidSignatureLength();\n error QueryResult(bytes result);\n\n string public constant name = \"Kernel\";\n\n string public constant version = \"0.0.1\";\n\n constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {}\n\n /// @notice initialize wallet kernel\n /// @dev this function should be called only once, implementation initialize is blocked by owner = address(1)\n /// @param _owner owner address\n function initialize(address _owner) external {\n WalletKernelStorage storage ws = getKernelStorage();\n require(ws.owner == address(0), \"account: already initialized\");\n ws.owner = _owner;\n }\n\n /// @notice Query plugin for data\n /// @dev this function will always fail, it should be used only to query plugin for data using error message\n /// @param _plugin Plugin address\n /// @param _data Data to query\n function queryPlugin(address _plugin, bytes calldata _data) external {\n (bool success, bytes memory _ret) = Exec.delegateCall(_plugin, _data);\n if (success) {\n revert QueryResult(_ret);\n } else {\n assembly {\n revert(add(_ret, 32), mload(_ret))\n }\n }\n }\n\n /// @notice execute function call to external contract\n /// @dev this function will execute function call to external contract\n /// @param to target contract address\n /// @param value value to be sent\n /// @param data data to be sent\n /// @param operation operation type (call or delegatecall)\n function executeAndRevert(address to, uint256 value, bytes calldata data, Operation operation) external {\n require(\n msg.sender == address(entryPoint) || msg.sender == getKernelStorage().owner,\n \"account: not from entrypoint or owner\"\n );\n bool success;\n bytes memory ret;\n if (operation == Operation.DelegateCall) {\n (success, ret) = Exec.delegateCall(to, data);\n } else {\n (success, ret) = Exec.call(to, value, data);\n }\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n }\n\n /// @notice validate user operation\n /// @dev this function will validate user operation and be called by EntryPoint\n /// @param userOp user operation\n /// @param userOpHash user operation hash\n /// @param missingAccountFunds funds needed to be reimbursed\n /// @return validationData validation data\n function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (uint256 validationData)\n {\n require(msg.sender == address(entryPoint), \"account: not from entryPoint\");\n if (userOp.signature.length == 65) {\n validationData = _validateUserOp(userOp, userOpHash);\n } else if (userOp.signature.length > 97) {\n // userOp.signature = address(plugin) + validUntil + validAfter + pluginData + pluginSignature\n address plugin = address(bytes20(userOp.signature[0:20]));\n uint48 validUntil = uint48(bytes6(userOp.signature[20:26]));\n uint48 validAfter = uint48(bytes6(userOp.signature[26:32]));\n bytes memory signature = userOp.signature[32:97];\n (bytes memory data,) = abi.decode(userOp.signature[97:], (bytes, bytes));\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\n \"ValidateUserOpPlugin(address plugin,uint48 validUntil,uint48 validAfter,bytes data)\"\n ), // we are going to trust plugin for verification\n plugin,\n validUntil,\n validAfter,\n keccak256(data)\n )\n )\n );\n\n address signer = ECDSA.recover(digest, signature);\n if (getKernelStorage().owner != signer) {\n return SIG_VALIDATION_FAILED;\n }\n bytes memory ret = _delegateToPlugin(plugin, userOp, userOpHash, missingAccountFunds);\n bool res = abi.decode(ret, (bool));\n if (!res) {\n return SIG_VALIDATION_FAILED;\n }\n validationData = _packValidationData(!res, validUntil, validAfter);\n } else {\n revert InvalidSignatureLength();\n }\n if (missingAccountFunds > 0) {\n // we are going to assume signature is valid at this point\n (bool success,) = msg.sender.call{value: missingAccountFunds}(\"\");\n (success);\n return validationData;\n }\n }\n\n function _validateUserOp(UserOperation calldata userOp, bytes32 userOpHash)\n internal\n view\n returns (uint256 validationData)\n {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(userOpHash, userOp.signature)) {\n return validationData;\n }\n\n bytes32 hash = ECDSA.toEthSignedMessageHash(userOpHash);\n address recovered = ECDSA.recover(hash, userOp.signature);\n if (ws.owner != recovered) {\n return SIG_VALIDATION_FAILED;\n }\n }\n\n /**\n * delegate the contract call to the plugin\n */\n function _delegateToPlugin(\n address plugin,\n UserOperation calldata userOp,\n bytes32 opHash,\n uint256 missingAccountFunds\n ) internal returns (bytes memory) {\n bytes memory data =\n abi.encodeWithSelector(IPlugin.validatePluginData.selector, userOp, opHash, missingAccountFunds);\n (bool success, bytes memory ret) = Exec.delegateCall(plugin, data); // Q: should we allow value > 0?\n if (!success) {\n assembly {\n revert(add(ret, 32), mload(ret))\n }\n }\n return ret;\n }\n\n /// @notice validate signature using eip1271\n /// @dev this function will validate signature using eip1271\n /// @param _hash hash to be signed\n /// @param _signature signature\n function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4) {\n WalletKernelStorage storage ws = getKernelStorage();\n if (ws.owner == ECDSA.recover(_hash, _signature)) {\n return 0x1626ba7e;\n }\n bytes32 hash = ECDSA.toEthSignedMessageHash(_hash);\n address recovered = ECDSA.recover(hash, _signature);\n // Validate signatures\n if (ws.owner == recovered) {\n return 0x1626ba7e;\n } else {\n return 0xffffffff;\n }\n }\n}\n" - }, - "src/KernelFactory.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/Create2.sol\";\nimport \"./factory/EIP1967Proxy.sol\";\nimport \"./Kernel.sol\";\n\ncontract KernelFactory {\n Kernel public immutable kernelTemplate;\n\n event AccountCreated(address indexed account, address indexed owner, uint256 index);\n\n constructor(IEntryPoint _entryPoint) {\n kernelTemplate = new Kernel(_entryPoint);\n }\n\n function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n address addr = Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n if (addr.code.length > 0) {\n return EIP1967Proxy(payable(addr));\n }\n proxy =\n new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(Kernel.initialize.selector, _owner));\n emit AccountCreated(address(proxy), _owner, _index);\n }\n\n function getAccountAddress(address _owner, uint256 _index) public view returns (address) {\n bytes32 salt = keccak256(abi.encodePacked(_owner, _index));\n return Create2.computeAddress(\n salt,\n keccak256(\n abi.encodePacked(\n type(EIP1967Proxy).creationCode,\n abi.encode(address(kernelTemplate), abi.encodeCall(Kernel.initialize, (_owner)))\n )\n )\n );\n }\n}\n" - }, - "src/plugin/IPlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"account-abstraction/interfaces/UserOperation.sol\";\n\ninterface IPlugin {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n returns (bool);\n}\n" - }, - "src/plugin/ZeroDevBasePlugin.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\";\nimport \"account-abstraction/interfaces/IAccount.sol\";\nimport \"account-abstraction/interfaces/IEntryPoint.sol\";\nimport \"./IPlugin.sol\";\nabstract contract ZeroDevBasePlugin is IPlugin, EIP712 {\n function validatePluginData(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)\n external\n override\n returns (bool validated)\n {\n // data offset starts at 97\n (bytes calldata data, bytes calldata signature) = parseDataAndSignature(userOp.signature[97:]);\n validated = _validatePluginData(userOp, userOpHash, data, signature);\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal virtual returns (bool success);\n\n function parseDataAndSignature(bytes calldata _packed)\n public\n pure\n returns (bytes calldata data, bytes calldata signature)\n {\n uint256 dataPosition = uint256(bytes32(_packed[0:32]));\n uint256 dataLength = uint256(bytes32(_packed[dataPosition:dataPosition + 32]));\n uint256 signaturePosition = uint256(bytes32(_packed[32:64]));\n uint256 signatureLength = uint256(bytes32(_packed[signaturePosition:signaturePosition + 32]));\n data = _packed[dataPosition + 32:dataPosition + 32 + dataLength];\n signature = _packed[signaturePosition + 32:signaturePosition + 32 + signatureLength];\n\n require(dataPosition + 64 + ((dataLength) / 32) * 32 == signaturePosition, \"invalid data\");\n require(signaturePosition + 64 + ((signatureLength) / 32) * 32 == _packed.length, \"invalid signature\");\n }\n}\n" - }, - "src/plugin/ZeroDevSessionKeyPlugin.sol": { - "content": "//SPDX-License-Identifier: GPL\npragma solidity ^0.8.7;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable reason-string */\n\nimport \"./ZeroDevBasePlugin.sol\";\nimport \"openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\";\nusing ECDSA for bytes32;\n/**\n * Main EIP4337 module.\n * Called (through the fallback module) using \"delegate\" from the GnosisSafe as an \"IAccount\",\n * so must implement validateUserOp\n * holds an immutable reference to the EntryPoint\n */\n\nstruct ZeroDevSessionKeyStorageStruct {\n mapping(address => bool) revoked;\n}\n\ncontract ZeroDevSessionKeyPlugin is ZeroDevBasePlugin {\n // return value in case of signature failure, with no time-range.\n // equivalent to packSigTimeRange(true,0,0);\n uint256 internal constant SIG_VALIDATION_FAILED = 1;\n\n event SessionKeyRevoked(address indexed key);\n\n constructor() EIP712(\"ZeroDevSessionKeyPlugin\", \"0.0.1\") {}\n\n function getPolicyStorage() internal pure returns (ZeroDevSessionKeyStorageStruct storage s) {\n bytes32 position = bytes32(uint256(keccak256(\"zero-dev.account.eip4337.sessionkey\")) - 1);\n assembly {\n s.slot := position\n }\n }\n\n // revoke session key\n function revokeSessionKey(address _key) external {\n getPolicyStorage().revoked[_key] = true;\n emit SessionKeyRevoked(_key);\n }\n\n function revoked(address _key) external view returns (bool) {\n return getPolicyStorage().revoked[_key];\n }\n\n function _validatePluginData(\n UserOperation calldata userOp,\n bytes32 userOpHash,\n bytes calldata data,\n bytes calldata signature\n ) internal view override returns (bool) {\n address sessionKey = address(bytes20(data[0:20]));\n require(!getPolicyStorage().revoked[sessionKey], \"session key revoked\");\n bytes32 merkleRoot = bytes32(data[20:52]);\n if(merkleRoot == bytes32(0)) {\n // means this session key has sudo permission\n signature = signature[33:98];\n } else {\n uint8 leafLength = uint8(signature[0]);\n bytes32[] memory proof;\n bytes32 leaf;\n if(leafLength == 20) {\n leaf = keccak256(signature[1:21]);\n proof = abi.decode(signature[86:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n signature = signature[21:86];\n } else if(leafLength == 24) {\n leaf = keccak256(signature[1:25]);\n proof = abi.decode(signature[90:], (bytes32[]));\n require(keccak256(userOp.callData[16:36]) == keccak256(signature[1:21]), \"invalid session key\");\n uint256 offset = uint256(bytes32(userOp.callData[68:100]));\n bytes calldata sig = userOp.callData[offset + 36: offset + 40];\n require(keccak256(sig) == keccak256(signature[21:25]));\n signature = signature[25:90];\n }\n require(MerkleProof.verify(proof, merkleRoot, leaf), \"invalide merkle root\");\n }\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n keccak256(\"Session(bytes32 userOpHash,uint256 nonce)\"), // we are going to trust plugin for verification\n userOpHash,\n userOp.nonce\n )\n )\n );\n address recovered = digest.recover(signature);\n require(recovered == sessionKey, \"account: invalid signature\");\n return true;\n }\n}\n" - }, - "src/test/TestCounter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\ncontract TestCounter {\n uint256 public counter;\n function increment() public {\n counter += 1;\n }\n}" - }, - "src/utils/Exec.sol": { - "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.5 <0.9.0;\n\n// solhint-disable no-inline-assembly\n\nenum Operation {\n Call,\n DelegateCall\n}\n\n/**\n * Utility functions helpful when making different kinds of contract calls in Solidity.\n */\nlibrary Exec {\n function call(address to, uint256 value, bytes memory data)\n internal\n returns (bool success, bytes memory returnData)\n {\n assembly {\n success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) {\n assembly {\n success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n\n function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) {\n assembly {\n success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)\n let len := returndatasize()\n let ptr := mload(0x40)\n mstore(0x40, add(ptr, add(len, 0x20)))\n mstore(ptr, len)\n returndatacopy(add(ptr, 0x20), 0, len)\n returnData := ptr\n }\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - }, - "remappings": [ - "@openzeppelin/=lib/openzeppelin-contracts/", - "account-abstraction/=lib/account-abstraction/contracts/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ] - } -} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 98436e34..2a88ba29 100644 --- a/foundry.toml +++ b/foundry.toml @@ -3,9 +3,13 @@ src = 'src' out = 'out' libs = ['lib'] remappings = ['account-abstraction/=lib/account-abstraction/contracts/'] +solc_version = '0.8.19' bytecode_hash = "none" cbor_metadata = false optimize = true +via-ir = true runs = 1000000 -# See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file +gas_reports=["Kernel","KernelLiteECDSA","KernelFactory"] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/gas/ecdsa/report-lite.txt b/gas/ecdsa/report-lite.txt new file mode 100644 index 00000000..bd7680bd --- /dev/null +++ b/gas/ecdsa/report-lite.txt @@ -0,0 +1,40 @@ +No files changed, compilation skipped + +Running 8 tests for test/foundry/KernelLite.t.sol:KernelTest +[PASS] test_disable_mode() (gas: 171425) +[PASS] test_external_call_default() (gas: 22953) +[PASS] test_external_call_execution() (gas: 439687) +[PASS] test_initialize_twice() (gas: 20968) +[PASS] test_set_default_validator() (gas: 369789) +[PASS] test_set_execution() (gas: 400852) +[PASS] test_validate_signature() (gas: 139666) +[PASS] test_validate_userOp() (gas: 1733019) +Test result: ok. 8 passed; 0 failed; 0 skipped; finished in 2.73ms +| src/factory/KernelFactory.sol:KernelFactory contract | | | | | | +|------------------------------------------------------|-----------------|--------|--------|--------|---------| +| Deployment Cost | Deployment Size | | | | | +| 594023 | 3050 | | | | | +| Function Name | min | avg | median | max | # calls | +| createAccount | 106913 | 107413 | 106913 | 111413 | 9 | +| deployDeterministicAndCall | 105350 | 105627 | 105350 | 107850 | 9 | +| setImplementation | 22862 | 22862 | 22862 | 22862 | 8 | + + +| src/lite/KernelLiteECDSA.sol:KernelLiteECDSA contract | | | | | | +|-------------------------------------------------------|-----------------|-------|--------|-------|---------| +| Deployment Cost | Deployment Size | | | | | +| 1598398 | 8392 | | | | | +| 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 | 21073 | 23069 | 23069 | 10 | +| isValidSignature | 8587 | 8587 | 8587 | 8587 | 1 | +| setDefaultValidator | 26774 | 26774 | 26774 | 26774 | 1 | +| setExecution | 49853 | 49853 | 49853 | 49853 | 2 | +| validateUserOp | 36049 | 36049 | 36049 | 36049 | 4 | + + + +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 new file mode 100644 index 00000000..fdbba4dd --- /dev/null +++ b/gas/ecdsa/report.txt @@ -0,0 +1,40 @@ +No files changed, compilation skipped + +Running 9 tests for test/foundry/Kernel.t.sol:KernelTest +[PASS] test_disable_mode() (gas: 162566) +[PASS] test_external_call_default() (gas: 28883) +[PASS] test_external_call_execution() (gas: 453173) +[PASS] test_initialize_twice() (gas: 20906) +[PASS] test_set_default_validator() (gas: 361039) +[PASS] test_set_execution() (gas: 411364) +[PASS] test_should_return_address_if_deployed() (gas: 24772) +[PASS] test_validate_signature() (gas: 166294) +[PASS] test_validate_userOp() (gas: 1687821) +Test result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.59ms +| 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 | 44370 | 48253 | 50753 | 11 | +| isValidSignature | 5764 | 5764 | 5764 | 5764 | 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 | 122858 | 133848 | 140848 | 11 | +| setImplementation | 22862 | 22862 | 22862 | 22862 | 9 | + + + +Ran 1 test suites: 9 tests passed, 0 failed, 0 skipped (9 total tests) diff --git a/gas/gas_report.sh b/gas/gas_report.sh new file mode 100755 index 00000000..a0b13430 --- /dev/null +++ b/gas/gas_report.sh @@ -0,0 +1,2 @@ +forge build +forge test --gas-report --match-path test/foundry/Kernel.t.sol > gas/ecdsa/report.txt diff --git a/hardhat.config.ts b/hardhat.config.ts index a6c8c5be..5e4a964e 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -4,6 +4,7 @@ import "@nomicfoundation/hardhat-foundry"; import "@nomiclabs/hardhat-ethers"; import "hardhat-deploy"; import '@typechain/hardhat' +import "./tasks/test_userOp" dotenv.config() diff --git a/lib/account-abstraction b/lib/account-abstraction index 9b5f2e4b..12be13e2 160000 --- a/lib/account-abstraction +++ b/lib/account-abstraction @@ -1 +1 @@ -Subproject commit 9b5f2e4bb30a81aa30761749d9e2e43fee64c768 +Subproject commit 12be13e2e97b763e1ef294602b3f2072bc301443 diff --git a/lib/solady b/lib/solady new file mode 160000 index 00000000..50cbe190 --- /dev/null +++ b/lib/solady @@ -0,0 +1 @@ +Subproject commit 50cbe1909e773b7e4ba76049c75a203e626d55ba diff --git a/package-lock.json b/package-lock.json index 226890ff..dc25237e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "@zerodevapp/contracts", - "version": "3.0.0-rc.5", + "version": "4.0.0-beta.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@zerodevapp/contracts", - "version": "3.0.0-rc.5", + "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.2", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@typechain/ethers-v5": "^10.2.0", "@typechain/hardhat": "^6.1.5", "@types/chai": "^4.3.4", @@ -2289,9 +2289,9 @@ } }, "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.2.tgz", - "integrity": "sha512-NLDlDFL2us07C0jB/9wzvR0kuLivChJWCXTKcj3yqjZqMoYp7g7wwS157F70VHx/+9gHIBGzak5pKDwG8gEefA==", + "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", @@ -10266,9 +10266,9 @@ "optional": true }, "@nomiclabs/hardhat-ethers": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.2.tgz", - "integrity": "sha512-NLDlDFL2us07C0jB/9wzvR0kuLivChJWCXTKcj3yqjZqMoYp7g7wwS157F70VHx/+9gHIBGzak5pKDwG8gEefA==", + "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": {} }, diff --git a/package.json b/package.json index 09bfda6f..59361532 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,14 @@ "name": "@zerodevapp/contracts", "description": "ZeroDev Account Abstraction (EIP 4337) contracts", "main": "./dist/index.js", - "version": "4.0.0-beta.9", + "version": "4.0.0-beta.10", "scripts": { "prepack": "./scripts/prepack-contracts-package.sh", "postpack": "./scripts/postpack-contracts-package.sh" }, "devDependencies": { "@nomicfoundation/hardhat-foundry": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.2.2", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@typechain/ethers-v5": "^10.2.0", "@typechain/hardhat": "^6.1.5", "@types/chai": "^4.3.4", diff --git a/remappings.txt b/remappings.txt index 8ca1b2ea..57bb3bbd 100644 --- a/remappings.txt +++ b/remappings.txt @@ -2,4 +2,5 @@ account-abstraction/=lib/account-abstraction/contracts/ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ openzeppelin-contracts/=lib/openzeppelin-contracts/ -@openzeppelin/=lib/openzeppelin-contracts/ +@openzeppelin/=lib/openzeppelin-contracts +solady/=lib/solady/src/ diff --git a/scripts/DeployECDSAValidator.s.sol b/scripts/DeployECDSAValidator.s.sol new file mode 100644 index 00000000..89774599 --- /dev/null +++ b/scripts/DeployECDSAValidator.s.sol @@ -0,0 +1,23 @@ +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/scripts/DeployKernel.s.sol b/scripts/DeployKernel.s.sol index 1791fa0a..5742e405 100644 --- a/scripts/DeployKernel.s.sol +++ b/scripts/DeployKernel.s.sol @@ -1,12 +1,39 @@ pragma solidity ^0.8.0; import "src/factory/KernelFactory.sol"; +import "account-abstraction/interfaces/IStakeManager.sol"; import "forge-std/Script.sol"; contract DeployKernel 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 { uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); vm.startBroadcast(key); - KernelFactory factory = new KernelFactory(IEntryPoint(0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789)); + Kernel kernel; + if(EXPECTED_KERNEL_ADDRESS.code.length == 0 ){ + kernel = new Kernel{salt:0}(IEntryPoint(ENTRYPOINT_0_6)); + console.log("Kernel address: %s", address(kernel)); + } else { + kernel = Kernel(EXPECTED_KERNEL_ADDRESS); + } + 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(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/scripts/DeploySessionKey.s.sol b/scripts/DeploySessionKey.s.sol new file mode 100644 index 00000000..d800a6e9 --- /dev/null +++ b/scripts/DeploySessionKey.s.sol @@ -0,0 +1,19 @@ +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_SESSION_KEY_VALIDATOR = 0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f; + function run() public { + uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(key); + if(EXPECTED_ADDRESS_SESSION_KEY_VALIDATOR.code.length == 0) { + console.log("deploying SessionKeyValidator"); + ExecuteSessionKeyValidator validator = new ExecuteSessionKeyValidator{salt:0}(); + console.log("validator address: %s", address(validator)); + } + vm.stopBroadcast(); + } +} + diff --git a/scripts/StakeToFactory.s.sol b/scripts/StakeToFactory.s.sol new file mode 100644 index 00000000..7c5a9c64 --- /dev/null +++ b/scripts/StakeToFactory.s.sol @@ -0,0 +1,23 @@ +pragma solidity ^0.8.0; + +import "src/factory/KernelFactory.sol"; +import "account-abstraction/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 { + uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(key); + KernelFactory factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS); + IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6); + IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory)); + if(info.stake < 1e18) { + factory.addStake{value: 1e18}(86400); + } + vm.stopBroadcast(); + } +} diff --git a/src/Kernel.sol b/src/Kernel.sol index 34a94a1d..0d4fdfd2 100644 --- a/src/Kernel.sol +++ b/src/Kernel.sol @@ -2,37 +2,46 @@ pragma solidity ^0.8.0; // Importing external libraries and contracts -import "openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol"; -import "account-abstraction/core/Helpers.sol"; -import "account-abstraction/interfaces/IAccount.sol"; +import "solady/utils/EIP712.sol"; +import "solady/utils/ECDSA.sol"; import "account-abstraction/interfaces/IEntryPoint.sol"; -import {EntryPoint} from "account-abstraction/core/EntryPoint.sol"; -import "./utils/Exec.sol"; import "./abstract/Compatibility.sol"; import "./abstract/KernelStorage.sol"; import "./utils/KernelHelper.sol"; +import "src/common/Constants.sol"; +import "src/common/Enum.sol"; /// @title Kernel /// @author taek -/// @notice wallet kernel for minimal wallet functionality -contract Kernel is IAccount, EIP712, Compatibility, KernelStorage { - string public constant name = "Kernel"; +/// @notice wallet kernel for extensible wallet functionality - string public constant version = "0.0.2"; +contract Kernel is EIP712, Compatibility, KernelStorage { + string public constant name = KERNEL_NAME; + + string public constant version = KERNEL_VERSION; + + error NotEntryPoint(); + error DisabledMode(); /// @dev Sets up the EIP712 and KernelStorage with the provided entry point - constructor(IEntryPoint _entryPoint) EIP712(name, version) KernelStorage(_entryPoint) {} + constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {} + + function _domainNameAndVersion() internal pure override returns (string memory, string memory) { + return (KERNEL_NAME, KERNEL_VERSION); + } /// @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 { - require(msg.sender == address(entryPoint), "account: not from entrypoint"); bytes4 sig = msg.sig; - address facet = getKernelStorage().execution[sig].executor; + address executor = getKernelStorage().execution[sig].executor; + if (msg.sender != address(entryPoint) && !_checkCaller()) { + revert NotAuthorizedCaller(); + } assembly { calldatacopy(0, 0, calldatasize()) - let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) + let result := delegatecall(gas(), executor, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } @@ -46,18 +55,25 @@ contract Kernel is IAccount, EIP712, Compatibility, KernelStorage { /// @param value The amount of Ether to send /// @param data The call data to be sent /// @param operation The type of operation (call or delegatecall) - function execute(address to, uint256 value, bytes calldata data, Operation operation) external { - require(msg.sender == address(entryPoint), "account: not from entrypoint"); - bool success; - bytes memory ret; - if (operation == Operation.DelegateCall) { - (success, ret) = Exec.delegateCall(to, data); - } else { - (success, ret) = Exec.call(to, value, data); + function execute(address to, uint256 value, bytes memory data, Operation operation) external payable { + if (msg.sender != address(entryPoint) && !_checkCaller()) { + revert NotAuthorizedCaller(); } - if (!success) { + if (operation == Operation.Call) { assembly { - revert(add(ret, 32), mload(ret)) + 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()) } + } + } else { + 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()) } } } } @@ -68,109 +84,165 @@ contract Kernel is IAccount, EIP712, Compatibility, KernelStorage { /// @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) + function validateUserOp(UserOperation memory userOp, bytes32 userOpHash, uint256 missingAccountFunds) external - returns (uint256 validationData) + payable + returns (ValidationData validationData) { - require(msg.sender == address(entryPoint), "account: not from entryPoint"); + if (msg.sender != address(entryPoint)) { + revert NotEntryPoint(); + } + bytes calldata userOpSignature; + uint256 userOpEndOffset; + bytes32 storage_slot_1; + assembly { + userOpEndOffset := add(calldataload(0x04), 0x24) + userOpSignature.offset := add(calldataload(add(userOpEndOffset, 0x120)), userOpEndOffset) + userOpSignature.length := calldataload(sub(userOpSignature.offset, 0x20)) + storage_slot_1 := sload(KERNEL_STORAGE_SLOT_1) + } // mode based signature - bytes4 mode = bytes4(userOp.signature[0:4]); // mode == 00..00 use validators - require(mode & getKernelStorage().disabledMode == 0x00000000, "kernel: mode disabled"); + bytes4 mode = bytes4(userOpSignature[0:4]); // mode == 00..00 use validators // mode == 0x00000000 use sudo validator // mode == 0x00000001 use given validator // mode == 0x00000002 enable validator - UserOperation memory op = userOp; IKernelValidator validator; - bytes4 sig = bytes4(userOp.callData[0:4]); if (mode == 0x00000000) { // sudo mode (use default validator) - op = userOp; - op.signature = userOp.signature[4:]; - validator = getKernelStorage().defaultValidator; + userOpSignature = userOpSignature[4:]; + assembly { + validator := shr(80, storage_slot_1) + } + } else if (mode & (storage_slot_1 << 224) != 0x00000000) { + revert DisabledMode(); } else if (mode == 0x00000001) { - ExecutionDetail storage detail = getKernelStorage().execution[sig]; + bytes calldata userOpCallData; + assembly { + userOpCallData.offset := add(calldataload(add(userOpEndOffset, 0x40)), userOpEndOffset) + userOpCallData.length := calldataload(sub(userOpCallData.offset, 0x20)) + } + ExecutionDetail storage detail = getKernelStorage().execution[bytes4(userOpCallData[0:4])]; validator = detail.validator; if (address(validator) == address(0)) { - validator = getKernelStorage().defaultValidator; + assembly { + validator := shr(80, storage_slot_1) + } } - op.signature = userOp.signature[4:]; - validationData = (uint256(detail.validAfter) << 160) | (uint256(detail.validUntil) << (48 + 160)); + 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)) + } // use given validator - // userOp.signature[4:10] = validUntil, - // userOp.signature[10:16] = validAfter, - // userOp.signature[16:36] = validator address, - validator = IKernelValidator(address(bytes20(userOp.signature[16:36]))); - bytes calldata enableData; - bytes calldata remainSig; - (validationData, enableData, remainSig) = _approveValidator(sig, userOp.signature); - validator.enable(enableData); - op.signature = remainSig; + // 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; } - if (missingAccountFunds > 0) { - // we are going to assume signature is valid at this point - (bool success,) = msg.sender.call{value: missingAccountFunds}(""); - (success); + if (missingAccountFunds != 0) { + assembly { + pop(call(gas(), caller(), missingAccountFunds, 0, 0, 0, 0)) + } + //ignore failure (its EntryPoint's job to verify, not account.) } + userOp.signature = userOpSignature; validationData = - _intersectValidationData(validationData, validator.validateUserOp(op, userOpHash, missingAccountFunds)); + _intersectValidationData(validationData, validator.validateUserOp(userOp, userOpHash, missingAccountFunds)); return validationData; } function _approveValidator(bytes4 sig, bytes calldata signature) internal - returns (uint256 validationData, bytes calldata enableData, bytes calldata validationSig) + returns (IKernelValidator validator, ValidationData validationData, bytes calldata validationSig) { - uint256 enableDataLength = uint256(bytes32(signature[56:88])); - enableData = signature[88:88 + enableDataLength]; - uint256 enableSignatureLength = uint256(bytes32(signature[88 + enableDataLength:120 + enableDataLength])); - bytes32 enableDigest = _hashTypedDataV4( - keccak256( - abi.encode( - keccak256("ValidatorApproved(bytes4 sig,uint256 validatorData,address executor,bytes enableData)"), - bytes4(sig), - uint256(bytes32(signature[4:36])), - address(bytes20(signature[36:56])), - keccak256(enableData) + unchecked { + validator = IKernelValidator(address(bytes20(signature[16:36]))); + uint256 cursor = 88; + uint256 length = uint256(bytes32(signature[56:88])); // this is enableDataLength + bytes calldata enableData; + assembly { + enableData.offset := add(signature.offset, cursor) + enableData.length := length + cursor := add(cursor, length) // 88 + enableDataLength + } + length = uint256(bytes32(signature[cursor:cursor + 32])); // this is enableSigLength + assembly { + cursor := add(cursor, 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( + getKernelStorage().defaultValidator.validateSignature(enableDigest, signature[cursor:cursor + length]), + ValidationData.wrap( + uint256(bytes32(signature[4:36])) + & 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 ) - ) - ); - validationData = _intersectValidationData( - getKernelStorage().defaultValidator.validateSignature( - enableDigest, signature[120 + enableDataLength:120 + enableDataLength + enableSignatureLength] - ), - uint256(bytes32(signature[4:36])) & (uint256(type(uint96).max) << 160) - ); - validationSig = signature[120 + enableDataLength + enableSignatureLength:]; - getKernelStorage().execution[sig] = ExecutionDetail({ - executor: address(bytes20(signature[36:56])), - validator: IKernelValidator(address(bytes20(signature[16:36]))), - validUntil: uint48(bytes6(signature[4:10])), - validAfter: uint48(bytes6(signature[10:16])) - }); - return (validationData, signature[88:88 + enableDataLength], validationSig); + ); + assembly { + cursor := add(cursor, length) + validationSig.offset := add(signature.offset, cursor) + validationSig.length := sub(signature.length, cursor) + } + 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); + } } - + /// @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) external view returns (bytes4) { - uint256 validationData = getKernelStorage().defaultValidator.validateSignature(hash, signature); - ValidationData memory data = _parseValidationData(validationData); - if (data.validAfter > block.timestamp) { + ValidationData validationData = getKernelStorage().defaultValidator.validateSignature(hash, signature); + (ValidAfter validAfter, ValidUntil validUntil, address result) = parseValidationData(validationData); + if (ValidAfter.unwrap(validAfter) > block.timestamp) { return 0xffffffff; } - if (data.validUntil < block.timestamp) { + if (ValidUntil.unwrap(validUntil) < block.timestamp) { return 0xffffffff; } - if (data.aggregator != address(0)) { + if (result != address(0)) { return 0xffffffff; } return 0x1626ba7e; } + + function _checkCaller() internal view returns (bool) { + if (getKernelStorage().defaultValidator.validCaller(msg.sender, msg.data)) { + 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); + } + } } diff --git a/src/abstract/KernelStorage.sol b/src/abstract/KernelStorage.sol index 25e46034..08ca56f2 100644 --- a/src/abstract/KernelStorage.sol +++ b/src/abstract/KernelStorage.sol @@ -3,32 +3,15 @@ pragma solidity ^0.8.0; // Importing necessary interfaces import "account-abstraction/interfaces/IEntryPoint.sol"; -import "src/validator/IValidator.sol"; - -// Defining a struct for execution details -struct ExecutionDetail { - uint48 validUntil; // Until what time is this execution valid - uint48 validAfter; // After what time is this execution valid - address executor; // Who is the executor of this execution - IKernelValidator validator; // The validator for this execution -} - -// 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 -} +import "src/interfaces/IValidator.sol"; +import "src/common/Constants.sol"; +import "src/common/Structs.sol"; /// @title Kernel Storage Contract -/// @author Your Name +/// @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. contract KernelStorage { - uint256 internal constant SIG_VALIDATION_FAILED = 1; // Signature validation failed error code - IEntryPoint public immutable entryPoint; // The entry point of the contract // Event declarations @@ -36,12 +19,15 @@ contract KernelStorage { 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(); + // Modifier to check if the function is called by the entry point, the contract itself or the owner - modifier onlyFromEntryPointOrOwnerOrSelf() { - require( - msg.sender == address(entryPoint) || msg.sender == address(this), - "account: not from entrypoint or owner or self" - ); + modifier onlyFromEntryPointOrSelf() { + if (msg.sender != address(entryPoint) && msg.sender != address(this)) { + revert NotAuthorizedCaller(); + } _; } @@ -53,27 +39,21 @@ contract KernelStorage { } // Function to initialize the wallet kernel - function initialize(IKernelValidator _defaultValidator, bytes calldata _data) external { - WalletKernelStorage storage ws = getKernelStorage(); - require(address(ws.defaultValidator) == address(0), "account: already initialized"); - ws.defaultValidator = _defaultValidator; - emit DefaultValidatorChanged(address(0), address(_defaultValidator)); - _defaultValidator.enable(_data); + function initialize(IKernelValidator _defaultValidator, bytes calldata _data) external payable { + _setInitialData(_defaultValidator, _data); } // 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 + ws.slot := KERNEL_STORAGE_SLOT } } // Function to upgrade the contract to a new implementation - function upgradeTo(address _newImplementation) external onlyFromEntryPointOrOwnerOrSelf { - bytes32 slot = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + function upgradeTo(address _newImplementation) external payable onlyFromEntryPointOrSelf { assembly { - sstore(slot, _newImplementation) + sstore(IMPLEMENTATION_SLOT, _newImplementation) } emit Upgraded(_newImplementation); } @@ -87,14 +67,17 @@ contract KernelStorage { return entryPoint.getNonce(address(this), key); } - // query storage - function getDefaultValidator() public view returns (IKernelValidator) { - return getKernelStorage().defaultValidator; + function getDefaultValidator() public view returns (IKernelValidator validator) { + assembly { + validator := shr(80, sload(KERNEL_STORAGE_SLOT_1)) + } } - function getDisabledMode() public view returns (bytes4) { - return getKernelStorage().disabledMode; + function getDisabledMode() public view returns (bytes4 disabled) { + assembly { + disabled := shl(224, sload(KERNEL_STORAGE_SLOT_1)) + } } function getLastDisabledTime() public view returns (uint48) { @@ -123,12 +106,12 @@ contract KernelStorage { uint48 _validUntil, uint48 _validAfter, bytes calldata _enableData - ) external onlyFromEntryPointOrOwnerOrSelf { + ) external payable onlyFromEntryPointOrSelf { getKernelStorage().execution[_selector] = ExecutionDetail({ executor: _executor, validator: _validator, - validUntil: _validUntil, - validAfter: _validAfter + validUntil: ValidUntil.wrap(_validUntil), + validAfter: ValidAfter.wrap(_validAfter) }); _validator.enable(_enableData); emit ExecutionChanged(_selector, _executor, address(_validator)); @@ -136,7 +119,8 @@ contract KernelStorage { function setDefaultValidator(IKernelValidator _defaultValidator, bytes calldata _data) external - onlyFromEntryPointOrOwnerOrSelf + payable + onlyFromEntryPointOrSelf { IKernelValidator oldValidator = getKernelStorage().defaultValidator; getKernelStorage().defaultValidator = _defaultValidator; @@ -147,8 +131,20 @@ contract KernelStorage { /// @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 onlyFromEntryPointOrOwnerOrSelf { + function disableMode(bytes4 _disableFlag) external payable 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/actions/ERC721Actions.sol b/src/actions/ERC721Actions.sol deleted file mode 100644 index bc6aaacf..00000000 --- a/src/actions/ERC721Actions.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; - -contract ERC721Actions { - function transferERC721Action(address _token, uint256 _id, address _to) external { - IERC721(_token).transferFrom(address(this), _to, _id); - } -} diff --git a/src/common/Constants.sol b/src/common/Constants.sol new file mode 100644 index 00000000..a17ca72c --- /dev/null +++ b/src/common/Constants.sol @@ -0,0 +1,16 @@ +pragma solidity ^0.8.0; + +// constants for kernel metadata +string constant KERNEL_NAME = "Kernel"; +string constant KERNEL_VERSION = "0.2.1"; + +// ERC4337 constants +uint256 constant SIG_VALIDATION_FAILED_UINT = 1; + +// STRUCT_HASH +bytes32 constant VALIDATOR_APPROVED_STRUCT_HASH = 0x3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee964176; + +// Storage slots +bytes32 constant KERNEL_STORAGE_SLOT = 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd8; +bytes32 constant KERNEL_STORAGE_SLOT_1 = 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9; +bytes32 constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; diff --git a/src/common/Enum.sol b/src/common/Enum.sol new file mode 100644 index 00000000..4a3668aa --- /dev/null +++ b/src/common/Enum.sol @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..f728400d --- /dev/null +++ b/src/common/Structs.sol @@ -0,0 +1,45 @@ +pragma solidity ^0.8.0; + +import "src/interfaces/IValidator.sol"; +import "src/common/Enum.sol"; +import "src/common/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 +} + +// 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 ParamRule { + uint256 offset; + ParamCondition condition; + bytes32 param; +} + +struct Permission { + address target; + uint256 valueLimit; + bytes4 sig; + ParamRule[] rules; + 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 + bool enabled; +} diff --git a/src/common/Types.sol b/src/common/Types.sol new file mode 100644 index 00000000..f72b7237 --- /dev/null +++ b/src/common/Types.sol @@ -0,0 +1,30 @@ +pragma solidity ^0.8.9; + +import "src/common/Constants.sol"; + +type ValidAfter is uint48; + +type ValidUntil is uint48; + +type ValidationData is uint256; + +ValidationData constant SIG_VALIDATION_FAILED = ValidationData.wrap(SIG_VALIDATION_FAILED_UINT); + +function packValidationData(ValidAfter validAfter, ValidUntil validUntil) pure returns (ValidationData) { + return ValidationData.wrap( + uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160 + ); +} + +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/executor/KillSwitchAction.sol b/src/executor/KillSwitchAction.sol new file mode 100644 index 00000000..e18f254c --- /dev/null +++ b/src/executor/KillSwitchAction.sol @@ -0,0 +1,37 @@ +pragma solidity ^0.8.18; + +import "src/interfaces/IValidator.sol"; +import "src/validator/KillSwitchValidator.sol"; +import "src/abstract/KernelStorage.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; + } + } +} diff --git a/src/executor/TokenActions.sol b/src/executor/TokenActions.sol new file mode 100644 index 00000000..d494131f --- /dev/null +++ b/src/executor/TokenActions.sol @@ -0,0 +1,21 @@ +pragma solidity ^0.8.0; + +import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; +import "openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol"; + +contract TokenActions { + function transfer20Action(address _token, uint256 _amount, address _to) external { + IERC20(_token).transfer(_to, _amount); + } + + function transferERC721Action(address _token, uint256 _id, address _to) external { + IERC721(_token).transferFrom(address(this), _to, _id); + } + + function transferERC1155Action(address _token, uint256 _id, address _to, uint256 amount, bytes calldata data) + external + { + IERC1155(_token).safeTransferFrom(address(this), _to, _id, amount, data); + } +} diff --git a/src/factory/AdminLessERC1967Factory.sol b/src/factory/AdminLessERC1967Factory.sol new file mode 100644 index 00000000..2587d1c5 --- /dev/null +++ b/src/factory/AdminLessERC1967Factory.sol @@ -0,0 +1,288 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +/// @notice Factory for deploying and managing ERC1967 proxy contracts. +/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ERC1967Factory.sol) +/// @author jtriley-eth (https://github.com/jtriley-eth/minimum-viable-proxy) +/// @author taeklee (https://github.com/zerodevapp/kernel) +contract AdminLessERC1967Factory { + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* CUSTOM ERRORS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + /// @dev The proxy deployment failed. + error DeploymentFailed(); + + /// @dev The salt does not start with the caller. + error SaltDoesNotStartWithCaller(); + + /// @dev `bytes4(keccak256(bytes("DeploymentFailed()")))`. + uint256 internal constant _DEPLOYMENT_FAILED_ERROR_SELECTOR = 0x30116425; + + /// @dev `bytes4(keccak256(bytes("SaltDoesNotStartWithCaller()")))`. + uint256 internal constant _SALT_DOES_NOT_START_WITH_CALLER_ERROR_SELECTOR = 0x2f634836; + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* EVENTS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + /// @dev A proxy has been deployed. + event Deployed(address indexed proxy, address indexed implementation); + + /// @dev `keccak256(bytes("Deployed(address,address)"))`. + uint256 internal constant _DEPLOYED_EVENT_SIGNATURE = + 0x09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20; + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* STORAGE */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + /// @dev The ERC-1967 storage slot for the implementation in the proxy. + /// `uint256(keccak256("eip1967.proxy.implementation")) - 1`. + uint256 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* DEPLOY FUNCTIONS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + /// @dev Deploys a proxy for `implementation`, with `salt`, + /// and returns its deterministic address. + /// The value passed into this function will be forwarded to the proxy. + /// Then, calls the proxy with abi encoded `data`. + function deployDeterministicAndCall(address implementation, bytes32 salt, bytes calldata data) + internal + returns (address proxy) + { + /// @solidity memory-safe-assembly + assembly { + // If the salt does not start with the zero address or the caller. + if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) { + mstore(0x00, _SALT_DOES_NOT_START_WITH_CALLER_ERROR_SELECTOR) + revert(0x1c, 0x04) + } + } + proxy = _deploy(implementation, salt, data); + } + + /// @dev Deploys the proxy, with optionality to deploy deterministically with a `salt`. + function _deploy(address implementation, bytes32 salt, bytes calldata data) internal returns (address proxy) { + bytes memory m = _initCode(); + /// @solidity memory-safe-assembly + assembly { + let hash := keccak256(add(m, 0x13), 0x89) + // Compute and store the bytecode hash. + mstore8(0x00, 0xff) // Write the prefix. + mstore(0x35, hash) + mstore(0x01, shl(96, address())) + mstore(0x15, salt) + proxy := keccak256(0x00, 0x55) + // Restore the part of the free memory pointer that has been overwritten. + mstore(0x35, 0) + if iszero(extcodesize(proxy)) { + proxy := create2(0, add(m, 0x13), 0x89, salt) + if iszero(proxy) { + // Revert if the creation fails. + mstore(0x00, _DEPLOYMENT_FAILED_ERROR_SELECTOR) + revert(0x1c, 0x04) + } + // Set up the calldata to set the implementation of the proxy. + mstore(m, implementation) + mstore(add(m, 0x20), _IMPLEMENTATION_SLOT) + calldatacopy(add(m, 0x40), data.offset, data.length) + // Try setting the implementation on the proxy and revert upon failure. + if iszero(call(gas(), proxy, callvalue(), m, add(0x40, data.length), 0x00, 0x00)) { + // Revert with the `DeploymentFailed` selector if there is no error returndata. + if iszero(returndatasize()) { + mstore(0x00, _DEPLOYMENT_FAILED_ERROR_SELECTOR) + revert(0x1c, 0x04) + } + // Otherwise, bubble up the returned error. + returndatacopy(0x00, 0x00, returndatasize()) + revert(0x00, returndatasize()) + } + + // Emit the {Deployed} event. + log3(0, 0, _DEPLOYED_EVENT_SIGNATURE, proxy, implementation) + } + } + } + + /// @dev Returns the address of the proxy deployed with `salt`. + function predictDeterministicAddress(bytes32 salt) public view returns (address predicted) { + bytes32 hash = initCodeHash(); + /// @solidity memory-safe-assembly + assembly { + // Compute and store the bytecode hash. + mstore8(0x00, 0xff) // Write the prefix. + mstore(0x35, hash) + mstore(0x01, shl(96, address())) + mstore(0x15, salt) + predicted := keccak256(0x00, 0x55) + // Restore the part of the free memory pointer that has been overwritten. + mstore(0x35, 0) + } + } + + /// @dev Returns the initialization code hash of the proxy. + /// Used for mining vanity addresses with create2crunch. + function initCodeHash() public view returns (bytes32 result) { + bytes memory m = _initCode(); + /// @solidity memory-safe-assembly + assembly { + result := keccak256(add(m, 0x13), 0x89) + } + } + + /// @dev Returns the initialization code of a proxy created via this factory. + function _initCode() internal view returns (bytes memory m) { + /// @solidity memory-safe-assembly + assembly { + /** + * -------------------------------------------------------------------------------------+ + * CREATION (9 bytes) | + * -------------------------------------------------------------------------------------| + * Opcode | Mnemonic | Stack | Memory | + * -------------------------------------------------------------------------------------| + * 60 runSize | PUSH1 runSize | r | | + * 3d | RETURNDATASIZE | 0 r | | + * 81 | DUP2 | r 0 r | | + * 60 offset | PUSH1 offset | o r 0 r | | + * 3d | RETURNDATASIZE | 0 o r 0 r | | + * 39 | CODECOPY | 0 r | [0..runSize): runtime code | + * f3 | RETURN | | [0..runSize): runtime code | + * -------------------------------------------------------------------------------------| + * RUNTIME (127 bytes) | + * -------------------------------------------------------------------------------------| + * Opcode | Mnemonic | Stack | Memory | + * -------------------------------------------------------------------------------------| + * | + * ::: keep some values in stack :::::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 3d | RETURNDATASIZE | 0 | | + * 3d | RETURNDATASIZE | 0 0 | | + * | + * ::: check if caller is factory ::::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 33 | CALLER | c 0 0 | | + * 73 factory | PUSH20 factory | f c 0 0 | | + * 14 | EQ | isf 0 0 | | + * 60 0x57 | PUSH1 0x57 | dest isf 0 0 | | + * 57 | JUMPI | 0 0 | | + * | + * ::: copy calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 36 | CALLDATASIZE | cds 0 0 | | + * 3d | RETURNDATASIZE | 0 cds 0 0 | | + * 3d | RETURNDATASIZE | 0 0 cds 0 0 | | + * 37 | CALLDATACOPY | 0 0 | [0..calldatasize): calldata | + * | + * ::: delegatecall to implementation ::::::::::::::::::::::::::::::::::::::::::::::::: | + * 36 | CALLDATASIZE | cds 0 0 | [0..calldatasize): calldata | + * 3d | RETURNDATASIZE | 0 cds 0 0 | [0..calldatasize): calldata | + * 7f slot | PUSH32 slot | s 0 cds 0 0 | [0..calldatasize): calldata | + * 54 | SLOAD | i cds 0 0 | [0..calldatasize): calldata | + * 5a | GAS | g i cds 0 0 | [0..calldatasize): calldata | + * f4 | DELEGATECALL | succ | [0..calldatasize): calldata | + * | + * ::: copy returndata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 3d | RETURNDATASIZE | rds succ | [0..calldatasize): calldata | + * 60 0x00 | PUSH1 0x00 | 0 rds succ | [0..calldatasize): calldata | + * 80 | DUP1 | 0 0 rds succ | [0..calldatasize): calldata | + * 3e | RETURNDATACOPY | succ | [0..returndatasize): returndata | + * | + * ::: branch on delegatecall status :::::::::::::::::::::::::::::::::::::::::::::::::: | + * 60 0x52 | PUSH1 0x52 | dest succ | [0..returndatasize): returndata | + * 57 | JUMPI | | [0..returndatasize): returndata | + * | + * ::: delegatecall failed, revert :::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 3d | RETURNDATASIZE | rds | [0..returndatasize): returndata | + * 60 0x00 | PUSH1 0x00 | 0 rds | [0..returndatasize): returndata | + * fd | REVERT | | [0..returndatasize): returndata | + * | + * ::: delegatecall succeeded, return ::::::::::::::::::::::::::::::::::::::::::::::::: | + * 5b | JUMPDEST | | [0..returndatasize): returndata | + * 3d | RETURNDATASIZE | rds | [0..returndatasize): returndata | + * 60 0x00 | PUSH1 0x00 | 0 rds | [0..returndatasize): returndata | + * f3 | RETURN | | [0..returndatasize): returndata | + * | + * ::: set new implementation (caller is factory) ::::::::::::::::::::::::::::::::::::: | + * 5b | JUMPDEST | 0 0 | | + * 3d | RETURNDATASIZE | 0 0 0 | | + * 35 | CALLDATALOAD | impl 0 0 | | + * 06 0x20 | PUSH1 0x20 | w impl 0 0 | | + * 35 | CALLDATALOAD | slot impl 0 0 | | + * 55 | SSTORE | 0 0 | | + * | + * ::: no extra calldata, return :::::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 60 0x40 | PUSH1 0x40 | 2w 0 0 | | + * 80 | DUP1 | 2w 2w 0 0 | | + * 36 | CALLDATASIZE | cds 2w 2w 0 0 | | + * 11 | GT | gt 2w 0 0 | | + * 15 | ISZERO | lte 2w 0 0 | | + * 60 0x52 | PUSH1 0x52 | dest lte 2w 0 0 | | + * 57 | JUMPI | 2w 0 0 | | + * | + * ::: copy extra calldata to memory :::::::::::::::::::::::::::::::::::::::::::::::::: | + * 36 | CALLDATASIZE | cds 2w 0 0 | | + * 03 | SUB | t 0 0 | | + * 80 | DUP1 | t t 0 0 | | + * 60 0x40 | PUSH1 0x40 | 2w t t 0 0 | | + * 3d | RETURNDATASIZE | 0 2w t t 0 0 | | + * 37 | CALLDATACOPY | t 0 0 | [0..t): extra calldata | + * | + * ::: delegatecall to implementation ::::::::::::::::::::::::::::::::::::::::::::::::: | + * 3d | RETURNDATASIZE | 0 t 0 0 | [0..t): extra calldata | + * 3d | RETURNDATASIZE | 0 0 t 0 0 | [0..t): extra calldata | + * 35 | CALLDATALOAD | i t 0 0 | [0..t): extra calldata | + * 5a | GAS | g i t 0 0 | [0..t): extra calldata | + * f4 | DELEGATECALL | succ | [0..t): extra calldata | + * | + * ::: copy returndata to memory :::::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 3d | RETURNDATASIZE | rds succ | [0..t): extra calldata | + * 60 0x00 | PUSH1 0x00 | 0 rds succ | [0..t): extra calldata | + * 80 | DUP1 | 0 0 rds succ | [0..t): extra calldata | + * 3e | RETURNDATACOPY | succ | [0..returndatasize): returndata | + * | + * ::: branch on delegatecall status :::::::::::::::::::::::::::::::::::::::::::::::::: | + * 60 0x52 | PUSH1 0x52 | dest succ | [0..returndatasize): returndata | + * 57 | JUMPI | | [0..returndatasize): returndata | + * | + * ::: delegatecall failed, revert :::::::::::::::::::::::::::::::::::::::::::::::::::: | + * 3d | RETURNDATASIZE | rds | [0..returndatasize): returndata | + * 60 0x00 | PUSH1 0x00 | 0 rds | [0..returndatasize): returndata | + * fd | REVERT | | [0..returndatasize): returndata | + * -------------------------------------------------------------------------------------+ + */ + + m := mload(0x40) + // forgefmt: disable-start + switch shr(112, address()) + case 0 { + // If the factory's address has six or more leading zero bytes. + mstore(add(m, 0x75), 0x604c573d6000fd) // 7 + mstore(add(m, 0x6e), 0x3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e) // 32 + mstore(add(m, 0x4e), 0x3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b) // 32 + mstore(add(m, 0x2e), 0x14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc) // 32 + mstore(add(m, 0x0e), address()) // 14 + mstore(m, 0x60793d8160093d39f33d3d336d) // 9 + 4 + } + default { + mstore(add(m, 0x7b), 0x6052573d6000fd) // 7 + mstore(add(m, 0x74), 0x3d356020355560408036111560525736038060403d373d3d355af43d6000803e) // 32 + mstore(add(m, 0x54), 0x3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b) // 32 + mstore(add(m, 0x34), 0x14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc) // 32 + mstore(add(m, 0x14), address()) // 20 + mstore(m, 0x607f3d8160093d39f33d3d3373) // 9 + 4 + } + // forgefmt: disable-end + } + } + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* HELPERS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + + /// @dev Helper function to return an empty bytes calldata. + function _emptyData() internal pure returns (bytes calldata data) { + /// @solidity memory-safe-assembly + assembly { + data.length := 0 + } + } +} diff --git a/src/factory/ECDSAKernelFactory.sol b/src/factory/ECDSAKernelFactory.sol deleted file mode 100644 index ab79f64b..00000000 --- a/src/factory/ECDSAKernelFactory.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.18; - -import "./KernelFactory.sol"; -import "src/validator/ECDSAValidator.sol"; - -contract ECDSAKernelFactory { - KernelFactory immutable public singletonFactory; - ECDSAValidator immutable public validator; - - constructor(KernelFactory _singletonFactory, ECDSAValidator _validator) { - singletonFactory = _singletonFactory; - validator = _validator; - } - - function createAccount(address _owner, uint256 _index) external returns (EIP1967Proxy proxy) { - bytes memory data = abi.encodePacked(_owner); - proxy = singletonFactory.createAccount(validator, data, _index); - } - - function getAccountAddress(address _owner, uint256 _index) public view returns (address) { - bytes memory data = abi.encodePacked(_owner); - return singletonFactory.getAccountAddress(validator, data, _index); - } -} diff --git a/src/factory/EIP1967Proxy.sol b/src/factory/EIP1967Proxy.sol deleted file mode 100644 index 645ca307..00000000 --- a/src/factory/EIP1967Proxy.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract EIP1967Proxy { - /** - * @dev Storage slot with the address of the current implementation. - * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is - * validated in the constructor. - */ - bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; - - constructor(address _logic, bytes memory _data) payable { - require(_logic != address(0), "EIP1967Proxy: implementation is the zero address"); - bytes32 slot = _IMPLEMENTATION_SLOT; - assembly { - sstore(slot, _logic) - } - if (_data.length > 0) { - (bool success,) = _logic.delegatecall(_data); - require(success, "EIP1967Proxy: constructor call failed"); - } - } - - fallback() external payable { - address implementation = _implementation(); - assembly { - // Copy msg.data. We take full control of memory in this inline assembly - // block because it will not return to Solidity code. We overwrite the - // Solidity scratch pad at memory position 0. - calldatacopy(0, 0, calldatasize()) - - // Call the implementation. - // out and outsize are 0 because we don't know the size yet. - let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) - - // Copy the returned data. - returndatacopy(0, 0, returndatasize()) - - switch result - // delegatecall returns 0 on error. - case 0 { revert(0, returndatasize()) } - default { return(0, returndatasize()) } - } - } - - function _implementation() internal view returns (address impl) { - bytes32 slot = _IMPLEMENTATION_SLOT; - assembly { - impl := sload(slot) - } - } -} diff --git a/src/factory/KernelFactory.sol b/src/factory/KernelFactory.sol index 812f961a..ba6b5ba4 100644 --- a/src/factory/KernelFactory.sol +++ b/src/factory/KernelFactory.sol @@ -1,49 +1,55 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import "./AdminLessERC1967Factory.sol"; + import "openzeppelin-contracts/contracts/utils/Create2.sol"; -import "./EIP1967Proxy.sol"; import "src/Kernel.sol"; import "src/validator/ECDSAValidator.sol"; +import "solady/auth/Ownable.sol"; + +contract KernelFactory is AdminLessERC1967Factory, Ownable { + IEntryPoint public entryPoint; + mapping(address => bool) public isAllowedImplementation; + + constructor(address _owner, IEntryPoint _entryPoint) { + _initializeOwner(_owner); + entryPoint = _entryPoint; + } + + function setImplementation(address _implementation, bool _allow) external onlyOwner { + isAllowedImplementation[_implementation] = _allow; + } + + function setEntryPoint(IEntryPoint _entryPoint) external onlyOwner { + entryPoint = _entryPoint; + } + + function createAccount(address _implementation, bytes calldata _data, uint256 _index) + external + payable + returns (address proxy) + { + require(isAllowedImplementation[_implementation], "KernelFactory: implementation not allowed"); + bytes32 salt = bytes32(uint256(keccak256(abi.encodePacked(_data, _index))) & type(uint96).max); + proxy = deployDeterministicAndCall(_implementation, salt, _data); + } + + 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); + } + + // stake functions + function addStake(uint32 unstakeDelaySec) external payable onlyOwner { + entryPoint.addStake{value: msg.value}(unstakeDelaySec); + } + + function unlockStake() external onlyOwner { + entryPoint.unlockStake(); + } -contract KernelFactory { - Kernel public immutable kernelTemplate; - - event AccountCreated(address indexed account, address indexed validator, bytes data, uint256 index); - - constructor(IEntryPoint _entryPoint) { - kernelTemplate = new Kernel(_entryPoint); - } - - function createAccount(IKernelValidator _validator, bytes calldata _data, uint256 _index) external returns (EIP1967Proxy proxy) { - bytes32 salt = keccak256(abi.encodePacked(_validator, _data, _index)); - address addr = Create2.computeAddress( - salt, - keccak256( - abi.encodePacked( - type(EIP1967Proxy).creationCode, - abi.encode(address(kernelTemplate), abi.encodeCall(KernelStorage.initialize, (_validator, _data))) - ) - ) - ); - if (addr.code.length > 0) { - return EIP1967Proxy(payable(addr)); - } - proxy = - new EIP1967Proxy{salt: salt}(address(kernelTemplate), abi.encodeWithSelector(KernelStorage.initialize.selector, _validator, _data)); - emit AccountCreated(address(proxy), address(_validator), _data, _index); - } - - function getAccountAddress(IKernelValidator _validator, bytes calldata _data, uint256 _index) public view returns (address) { - bytes32 salt = keccak256(abi.encodePacked(_validator, _data, _index)); - return Create2.computeAddress( - salt, - keccak256( - abi.encodePacked( - type(EIP1967Proxy).creationCode, - abi.encode(address(kernelTemplate), abi.encodeCall(KernelStorage.initialize, (_validator, _data)) - ) - ) - )); + function withdrawStake(address payable withdrawAddress) external onlyOwner { + entryPoint.withdrawStake(withdrawAddress); } } diff --git a/src/interfaces/IAddressBook.sol b/src/interfaces/IAddressBook.sol new file mode 100644 index 00000000..c1f67e99 --- /dev/null +++ b/src/interfaces/IAddressBook.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.18; + +interface IAddressBook { + function getOwners() external view returns (address[] memory); +} diff --git a/src/IKernel.sol b/src/interfaces/IKernel.sol similarity index 100% rename from src/IKernel.sol rename to src/interfaces/IKernel.sol diff --git a/src/validator/IValidator.sol b/src/interfaces/IValidator.sol similarity index 53% rename from src/validator/IValidator.sol rename to src/interfaces/IValidator.sol index 5644db3b..691223a5 100644 --- a/src/validator/IValidator.sol +++ b/src/interfaces/IValidator.sol @@ -1,18 +1,22 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "account-abstraction/interfaces/UserOperation.sol"; +import {UserOperation} from "account-abstraction/interfaces/UserOperation.sol"; +import "src/common/Types.sol"; interface IKernelValidator { - function enable(bytes calldata _data) external; + function enable(bytes calldata _data) external payable; - function disable(bytes calldata _data) external; + function disable(bytes calldata _data) external payable; function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds) external - returns (uint256); + payable + returns (ValidationData); - function validateSignature(bytes32 hash, bytes calldata signature) external view returns (uint256); + function validateSignature(bytes32 hash, bytes calldata signature) external view returns (ValidationData); + + function validCaller(address caller, bytes calldata data) external view returns (bool); } // 3 modes diff --git a/src/test/TestERC20.sol b/src/test/TestERC20.sol new file mode 100644 index 00000000..d45c78bd --- /dev/null +++ b/src/test/TestERC20.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "solady/tokens/ERC20.sol"; + +contract TestERC20 is ERC20 { + constructor() ERC20() {} + + 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/test/TestERC721.sol b/src/test/TestERC721.sol index 2cc1aa8a..7c110fec 100644 --- a/src/test/TestERC721.sol +++ b/src/test/TestERC721.sol @@ -1,12 +1,28 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; +import "solady/tokens/ERC721.sol"; contract TestERC721 is ERC721 { - constructor() ERC721("TestERC721", "TEST") {} + constructor() ERC721() {} + + 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/test/TestExecutor.sol b/src/test/TestExecutor.sol index f720a674..0e97c42c 100644 --- a/src/test/TestExecutor.sol +++ b/src/test/TestExecutor.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.0; contract TestExecutor { event TestExecutorDoNothing(); + function doNothing() external { // do nothing emit TestExecutorDoNothing(); diff --git a/src/test/TestKernel.sol b/src/test/TestKernel.sol new file mode 100644 index 00000000..d737a1a3 --- /dev/null +++ b/src/test/TestKernel.sol @@ -0,0 +1,14 @@ +pragma solidity ^0.8.0; + +import "src/Kernel.sol"; + +contract TestKernel is Kernel { + constructor(IEntryPoint _entryPoint) Kernel(_entryPoint) {} + + 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/test/TestValidator.sol b/src/test/TestValidator.sol index a59d4cff..1882639e 100644 --- a/src/test/TestValidator.sol +++ b/src/test/TestValidator.sol @@ -1,28 +1,43 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "src/validator/IValidator.sol"; -import "forge-std/console.sol"; +import "src/interfaces/IValidator.sol"; +import "src/common/Types.sol"; contract TestValidator is IKernelValidator { event TestValidateUserOp(bytes32 indexed opHash); event TestEnable(bytes data); event TestDisable(bytes data); - function validateSignature(bytes32, bytes calldata) external pure override returns (uint256) { - return 0; + mapping(address kernel => address) public caller; + + function sudoSetCaller(address _kernel, address _caller) external { + caller[_kernel] = _caller; + } + + function validateSignature(bytes32, bytes calldata) external pure override returns (ValidationData) { + return ValidationData.wrap(0); } - function validateUserOp(UserOperation calldata, bytes32 userOpHash, uint256) external override returns (uint256) { + function validateUserOp(UserOperation calldata, bytes32 userOpHash, uint256) + external + payable + override + returns (ValidationData) + { emit TestValidateUserOp(userOpHash); - return 0; + return ValidationData.wrap(0); } - function enable(bytes calldata data) external override { + function enable(bytes calldata data) external payable override { emit TestEnable(data); } - function disable(bytes calldata data) external override { + 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/utils/Exec.sol b/src/utils/Exec.sol deleted file mode 100644 index 527e0c5f..00000000 --- a/src/utils/Exec.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity >=0.7.5 <0.9.0; - -// solhint-disable no-inline-assembly - -enum Operation { - Call, - DelegateCall -} - -/** - * Utility functions helpful when making different kinds of contract calls in Solidity. - */ -library Exec { - function call(address to, uint256 value, bytes memory data) - internal - returns (bool success, bytes memory returnData) - { - assembly { - success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0) - let len := returndatasize() - let ptr := mload(0x40) - mstore(0x40, add(ptr, add(len, 0x20))) - mstore(ptr, len) - returndatacopy(add(ptr, 0x20), 0, len) - returnData := ptr - } - } - - function staticcall(address to, bytes memory data) internal view returns (bool success, bytes memory returnData) { - assembly { - success := staticcall(gas(), to, add(data, 0x20), mload(data), 0, 0) - let len := returndatasize() - let ptr := mload(0x40) - mstore(0x40, add(ptr, add(len, 0x20))) - mstore(ptr, len) - returndatacopy(add(ptr, 0x20), 0, len) - returnData := ptr - } - } - - function delegateCall(address to, bytes memory data) internal returns (bool success, bytes memory returnData) { - assembly { - success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0) - let len := returndatasize() - let ptr := mload(0x40) - mstore(0x40, add(ptr, add(len, 0x20))) - mstore(ptr, len) - returndatacopy(add(ptr, 0x20), 0, len) - returnData := ptr - } - } -} diff --git a/src/utils/KernelHelper.sol b/src/utils/KernelHelper.sol index 5a35715b..77b67d0e 100644 --- a/src/utils/KernelHelper.sol +++ b/src/utils/KernelHelper.sol @@ -1,18 +1,27 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -uint256 constant SIG_VALIDATION_FAILED = 1; +import {SIG_VALIDATION_FAILED_UINT} from "src/common/Constants.sol"; +import {ValidationData} from "src/common/Types.sol"; -function _intersectValidationData(uint256 a, uint256 b) pure returns (uint256 validationData) { - if(uint160(a) != uint160(b)) { - return SIG_VALIDATION_FAILED; +function _intersectValidationData(ValidationData a, ValidationData b) pure returns (ValidationData validationData) { + assembly { + // xor(a,b) == shows only matching bits + // and(xor(a,b), 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff) == filters out the validAfter and validUntil bits + // if the result is not zero, then aggregator part is not matching + switch iszero(and(xor(a, b), 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff)) + case 1 { + // validAfter + let a_vd := and(0xffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff, a) + let b_vd := and(0xffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff, b) + validationData := xor(a_vd, mul(xor(a_vd, b_vd), gt(b_vd, a_vd))) + // validUntil + a_vd := and(0x000000000000ffffffffffff0000000000000000000000000000000000000000, a) + b_vd := and(0x000000000000ffffffffffff0000000000000000000000000000000000000000, b) + let until := xor(a_vd, mul(xor(a_vd, b_vd), lt(b_vd, a_vd))) + if iszero(until) { until := 0x000000000000ffffffffffff0000000000000000000000000000000000000000 } + validationData := or(validationData, until) + } + default { validationData := SIG_VALIDATION_FAILED_UINT } } - uint48 validAfterA = uint48(a >> 160); - uint48 validUntilA = uint48(a >> (48 + 160)); - uint48 validAfterB = uint48(b >> 160); - uint48 validUntilB = uint48(b >> (48 + 160)); - - if (validAfterA < validAfterB) validAfterA = validAfterB; - if (validUntilA > validUntilB) validUntilA = validUntilB; - validationData = uint256(uint160(a)) | (uint256(validAfterA) << 160) | (uint256(validUntilA) << (48 + 160)); } diff --git a/src/validator/ECDSAValidator.sol b/src/validator/ECDSAValidator.sol index 1d465650..da48b590 100644 --- a/src/validator/ECDSAValidator.sol +++ b/src/validator/ECDSAValidator.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.0; -import "./IValidator.sol"; -import "openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol"; -import "forge-std/console.sol"; +import "solady/utils/ECDSA.sol"; import "src/utils/KernelHelper.sol"; +import "src/interfaces/IValidator.sol"; +import "src/common/Types.sol"; struct ECDSAValidatorStorage { address owner; @@ -16,11 +16,11 @@ contract ECDSAValidator is IKernelValidator { mapping(address => ECDSAValidatorStorage) public ecdsaValidatorStorage; - function disable(bytes calldata) external override { + function disable(bytes calldata) external payable override { delete ecdsaValidatorStorage[msg.sender]; } - function enable(bytes calldata _data) external override { + 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; @@ -29,32 +29,34 @@ contract ECDSAValidator is IKernelValidator { function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) external - view + payable override - returns (uint256 validationData) + returns (ValidationData validationData) { address owner = ecdsaValidatorStorage[_userOp.sender].owner; - if (owner == ECDSA.recover(_userOpHash, _userOp.signature)) { - return 0; - } - bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); - address recovered = ECDSA.recover(hash, _userOp.signature); - if (owner != recovered) { + if (owner == ECDSA.recover(hash, _userOp.signature)) { + return ValidationData.wrap(0); + } + if (owner != ECDSA.recover(_userOpHash, _userOp.signature)) { return SIG_VALIDATION_FAILED; } } - function validateSignature(bytes32 hash, bytes calldata signature) public view override returns (uint256) { + function validateSignature(bytes32 hash, bytes calldata signature) public view override returns (ValidationData) { address owner = ecdsaValidatorStorage[msg.sender].owner; - if( owner == ECDSA.recover(hash, signature) ) { - return 0; + if (owner == ECDSA.recover(hash, signature)) { + return ValidationData.wrap(0); } bytes32 ethHash = ECDSA.toEthSignedMessageHash(hash); address recovered = ECDSA.recover(ethHash, signature); if (owner != recovered) { return SIG_VALIDATION_FAILED; } - return 0; + return ValidationData.wrap(0); + } + + function validCaller(address _caller, bytes calldata) external view override returns (bool) { + return ecdsaValidatorStorage[msg.sender].owner == _caller; } } diff --git a/src/validator/ERC165SessionKeyValidator.sol b/src/validator/ERC165SessionKeyValidator.sol index 44fcce4a..d0071274 100644 --- a/src/validator/ERC165SessionKeyValidator.sol +++ b/src/validator/ERC165SessionKeyValidator.sol @@ -1,55 +1,64 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "./IValidator.sol"; -import "openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol"; import "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import "solady/utils/ECDSA.sol"; import "src/utils/KernelHelper.sol"; - -import "forge-std/console.sol"; - +import "src/interfaces/IValidator.sol"; +import "src/common/Types.sol"; // idea, we can make this merkle root struct ERC165SessionKeyStorage { bool enabled; bytes4 selector; bytes4 interfaceId; - uint48 validUntil; - uint48 validAfter; + ValidAfter validAfter; + ValidUntil validUntil; uint32 addressOffset; } contract ERC165SessionKeyValidator is IKernelValidator { - mapping(address => mapping(address => ERC165SessionKeyStorage)) public sessionKeys; - function enable(bytes calldata _data) external { + 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]); - uint48 validUntil = uint48(bytes6(_data[28:34])); - uint48 validAfter = uint48(bytes6(_data[34:40])); + 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[msg.sender][sessionKey] = ERC165SessionKeyStorage(true, selector, interfaceId, validUntil, validAfter, addressOffset); + sessionKeys[sessionKey][msg.sender] = + ERC165SessionKeyStorage(true, selector, interfaceId, validAfter, validUntil, addressOffset); } - function disable(bytes calldata _data) external { + function disable(bytes calldata _data) external payable { address sessionKey = address(bytes20(_data[0:20])); - delete sessionKeys[msg.sender][sessionKey]; + + delete sessionKeys[sessionKey][msg.sender]; } - function validateSignature(bytes32, bytes calldata) external pure override returns(uint256) { + function validateSignature(bytes32, bytes calldata) external pure override returns (ValidationData) { revert("not implemented"); } - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) external view returns(uint256){ + 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[_userOp.sender][recovered]; + 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])); + address token = address(bytes20(_userOp.callData[sessionKey.addressOffset:sessionKey.addressOffset + 20])); require(IERC165(token).supportsInterface(sessionKey.interfaceId), "does not support interface"); - return (uint256(sessionKey.validAfter) << 160) | (uint256(sessionKey.validUntil) << (48 + 160)); + return packValidationData(sessionKey.validAfter, sessionKey.validUntil); + } + + function validCaller(address, bytes calldata) external pure override returns (bool) { + revert("not implemented"); } } diff --git a/src/validator/KillSwitchValidator.sol b/src/validator/KillSwitchValidator.sol index fcfb4e5d..721c0a65 100644 --- a/src/validator/KillSwitchValidator.sol +++ b/src/validator/KillSwitchValidator.sol @@ -2,60 +2,89 @@ pragma solidity ^0.8.0; -import "./IValidator.sol"; -import "openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol"; +import "solady/utils/ECDSA.sol"; import "src/utils/KernelHelper.sol"; -import "account-abstraction/core/Helpers.sol"; import "src/Kernel.sol"; -import "./ECDSAValidator.sol"; +import {WalletKernelStorage, ExecutionDetail} from "src/abstract/KernelStorage.sol"; +import "src/interfaces/IValidator.sol"; +import "src/common/Types.sol"; struct KillSwitchValidatorStorage { - address owner; address guardian; - uint48 pausedUntil; + IKernelValidator validator; + ValidAfter pausedUntil; + bytes4 disableMode; } contract KillSwitchValidator is IKernelValidator { mapping(address => KillSwitchValidatorStorage) public killSwitchValidatorStorage; - - function enable(bytes calldata enableData) external override { - killSwitchValidatorStorage[msg.sender].owner = address(bytes20(enableData[0:20])); - killSwitchValidatorStorage[msg.sender].guardian = address(bytes20(enableData[20:40])); + + function enable(bytes calldata enableData) external payable override { + killSwitchValidatorStorage[msg.sender].guardian = address(bytes20(enableData[0:20])); } - function disable(bytes calldata) external override { + function disable(bytes calldata) external payable override { delete killSwitchValidatorStorage[msg.sender]; } - function validateSignature(bytes32 hash, bytes calldata signature) external view override returns (uint256) { + function validateSignature(bytes32 hash, bytes calldata signature) + external + view + override + returns (ValidationData) + { KillSwitchValidatorStorage storage validatorStorage = killSwitchValidatorStorage[msg.sender]; - return _packValidationData(validatorStorage.owner != ECDSA.recover(hash, signature), 0, validatorStorage.pausedUntil); + ValidationData res = validatorStorage.validator.validateSignature(hash, signature); + ValidAfter pausedUntil = validatorStorage.pausedUntil; + (,, address result) = parseValidationData(res); + if (result != address(1)) { + // if signature verification has not been failed, return with the result + ValidationData delayedData = packValidationData(pausedUntil, ValidUntil.wrap(0)); + return _intersectValidationData(res, delayedData); + } + return SIG_VALIDATION_FAILED; } - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) external override returns (uint256) { - address signer; - bytes calldata signature; - KillSwitchValidatorStorage storage validatorStorage = killSwitchValidatorStorage[_userOp.sender]; - if(_userOp.signature.length == 6 + 20 + 65) { - require(bytes4(_userOp.callData[0:4]) != KernelStorage.disableMode.selector); - signer = validatorStorage.guardian; - uint48 pausedUntil = uint48(bytes6(_userOp.signature[0:6])); - require(pausedUntil > validatorStorage.pausedUntil, "KillSwitchValidator: invalid pausedUntil"); - killSwitchValidatorStorage[_userOp.sender].pausedUntil = pausedUntil; - signature = _userOp.signature[6:71]; - } else { - signer = killSwitchValidatorStorage[_userOp.sender].owner; - signature = _userOp.signature; - } - if (signer == ECDSA.recover(_userOpHash, signature)) { // address(0) attack has been resolved in ECDSA library - return _packValidationData(false,0,validatorStorage.pausedUntil); + 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); + } } - - bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); - address recovered = ECDSA.recover(hash, signature); - if (signer != recovered) { + if (_userOp.signature.length == 71) { + // save data to this storage + validatorStorage.pausedUntil = ValidAfter.wrap(uint48(bytes6(_userOp.signature[0:6]))); + validatorStorage.validator = KernelStorage(msg.sender).getDefaultValidator(); + validatorStorage.disableMode = KernelStorage(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; } - return _packValidationData(false,0,validatorStorage.pausedUntil); + } + + function validCaller(address, bytes calldata) external pure override returns (bool) { + revert("not implemented"); } } diff --git a/src/validator/MultiECDSAValidator.sol b/src/validator/MultiECDSAValidator.sol new file mode 100644 index 00000000..fe8726d6 --- /dev/null +++ b/src/validator/MultiECDSAValidator.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "solady/utils/ECDSA.sol"; +import "src/utils/KernelHelper.sol"; +import "src/interfaces/IAddressBook.sol"; +import "src/interfaces/IValidator.sol"; +import "src/common/Types.sol"; + +contract MultiECDSAValidator is IKernelValidator { + event OwnerAdded(address indexed kernel, address indexed owner); + event OwnerRemoved(address indexed kernel, address indexed owner); + + mapping(address owner => mapping(address kernel => bool) hello) public isOwner; + + function disable(bytes calldata _data) external payable override { + address[] memory owners = abi.decode(_data, (address[])); + for (uint256 i = 0; i < owners.length; i++) { + isOwner[owners[i]][msg.sender] = false; + emit OwnerRemoved(msg.sender, owners[i]); + } + } + + function enable(bytes calldata _data) external payable override { + address addressBook = address(bytes20(_data)); + address[] memory owners = IAddressBook(addressBook).getOwners(); + for (uint256 i = 0; i < owners.length; i++) { + isOwner[owners[i]][msg.sender] = true; + emit OwnerAdded(msg.sender, owners[i]); + } + } + + function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) + external + payable + override + returns (ValidationData validationData) + { + address signer = ECDSA.recover(_userOpHash, _userOp.signature); + if (isOwner[signer][msg.sender]) { + return ValidationData.wrap(0); + } + + bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); + signer = ECDSA.recover(hash, _userOp.signature); + if (!isOwner[signer][msg.sender]) { + return SIG_VALIDATION_FAILED; + } + return ValidationData.wrap(0); + } + + function validateSignature(bytes32 hash, bytes calldata signature) public view override returns (ValidationData) { + address signer = ECDSA.recover(hash, signature); + if (isOwner[signer][msg.sender]) { + return ValidationData.wrap(0); + } + bytes32 ethHash = ECDSA.toEthSignedMessageHash(hash); + signer = ECDSA.recover(ethHash, signature); + if (!isOwner[signer][msg.sender]) { + return SIG_VALIDATION_FAILED; + } + return ValidationData.wrap(0); + } + + function validCaller(address _caller, bytes calldata) external view override returns (bool) { + return isOwner[_caller][msg.sender]; + } +} diff --git a/src/validator/SessionKeyOwnedValidator.sol b/src/validator/SessionKeyOwnedValidator.sol new file mode 100644 index 00000000..6cd3c176 --- /dev/null +++ b/src/validator/SessionKeyOwnedValidator.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "solady/utils/ECDSA.sol"; +import "solady/utils/EIP712.sol"; +import "src/utils/KernelHelper.sol"; +import "src/interfaces/IValidator.sol"; +import "src/common/Types.sol"; + +struct SessionKeyStorage { + ValidUntil validUntil; + ValidAfter validAfter; +} + +contract SessionKeyOwnedValidator is IKernelValidator { + event OwnerChanged(address indexed kernel, address indexed oldOwner, address indexed newOwner); + + mapping(address sessionKey => mapping(address kernel => SessionKeyStorage)) public sessionKeyStorage; + + function disable(bytes calldata _data) external payable override { + address sessionKey = address(bytes20(_data[0:20])); + delete sessionKeyStorage[sessionKey][msg.sender]; + } + + function enable(bytes calldata _data) external payable override { + address sessionKey = address(bytes20(_data[0:20])); + ValidAfter validAfter = ValidAfter.wrap(uint48(bytes6(_data[20:26]))); + ValidUntil validUntil = ValidUntil.wrap(uint48(bytes6(_data[26:32]))); + require( + ValidUntil.unwrap(validUntil) > ValidAfter.unwrap(validAfter), + "SessionKeyOwnedValidator: invalid validUntil/validAfter" + ); // we do not allow validUntil == 0 here use validUntil == 2**48-1 instead + sessionKeyStorage[sessionKey][msg.sender] = SessionKeyStorage(validUntil, validAfter); + } + + function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) + external + payable + override + returns (ValidationData validationData) + { + bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); + address recovered = ECDSA.recover(hash, _userOp.signature); + + SessionKeyStorage storage sessionKey = sessionKeyStorage[recovered][msg.sender]; + if (ValidUntil.unwrap(sessionKey.validUntil) == 0) { + // we do not allow validUntil == 0 here + return SIG_VALIDATION_FAILED; + } + validationData = packValidationData(sessionKey.validAfter, sessionKey.validUntil); + } + + function validateSignature(bytes32 hash, bytes calldata signature) + public + view + override + returns (ValidationData validationData) + { + address recovered = ECDSA.recover(hash, signature); + + SessionKeyStorage storage sessionKey = sessionKeyStorage[recovered][msg.sender]; + if (ValidUntil.unwrap(sessionKey.validUntil) != 0) { + return packValidationData(sessionKey.validAfter, sessionKey.validUntil); + } + + hash = ECDSA.toEthSignedMessageHash(hash); + recovered = ECDSA.recover(hash, signature); + sessionKey = sessionKeyStorage[recovered][msg.sender]; + if (ValidUntil.unwrap(sessionKey.validUntil) == 0) { + // we do not allow validUntil == 0 here + return SIG_VALIDATION_FAILED; + } + return packValidationData(sessionKey.validAfter, sessionKey.validUntil); + } + + function validCaller(address _caller, bytes calldata) external view override returns (bool) { + SessionKeyStorage storage sessionKey = sessionKeyStorage[_caller][msg.sender]; + if (block.timestamp <= ValidAfter.unwrap(sessionKey.validAfter)) { + return false; + } + if (block.timestamp > ValidUntil.unwrap(sessionKey.validUntil)) { + return false; + } + return true; + } +} diff --git a/src/validator/SessionKeyValidator.sol b/src/validator/SessionKeyValidator.sol new file mode 100644 index 00000000..6a94a1bb --- /dev/null +++ b/src/validator/SessionKeyValidator.sol @@ -0,0 +1,102 @@ +pragma solidity ^0.8.0; + +import "solady/utils/ECDSA.sol"; +import "src/interfaces/IValidator.sol"; +import "solady/utils/MerkleProofLib.sol"; +import "src/common/Constants.sol"; +import "src/common/Enum.sol"; +import "src/common/Structs.sol"; +import "src/common/Types.sol"; + +contract ExecuteSessionKeyValidator is IKernelValidator { + mapping(address sessionKey => mapping(address kernel => SessionData)) public sessionData; + + 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])); + sessionData[sessionKey][msg.sender] = SessionData(merkleRoot, validAfter, validUntil, paymaster, true); + } + + function disable(bytes calldata _data) external payable { + address sessionKey = address(bytes20(_data[0:20])); + address kernel = msg.sender; + sessionData[sessionKey][kernel].enabled = false; + } + + function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256) + external + payable + returns (ValidationData) + { + // userOp.signature = signer + signature + permission + merkleProof + address sessionKey = address(bytes20(userOp.signature[0:20])); + bytes calldata signature = userOp.signature[20:85]; + SessionData storage session = sessionData[sessionKey][msg.sender]; + require(session.enabled, "SessionKeyValidator: session key not enabled"); + if (session.merkleRoot == bytes32(0)) { + // sessionKey allowed to execute any tx + return packValidationData(session.validAfter, session.validUntil); + } + if (session.paymaster == address(1)) { + require(userOp.paymasterAndData.length != 0, "SessionKeyValidator: paymaster not set"); + } else if (session.paymaster != address(0)) { + require( + address(bytes20(userOp.paymasterAndData[0:20])) == session.paymaster, + "SessionKeyValidator: paymaster mismatch" + ); + } + + (Permission memory permission, bytes32[] memory merkleProof) = + abi.decode(userOp.signature[85:], (Permission, bytes32[])); + require( + permission.target == address(0) || address(bytes20(userOp.callData[16:36])) == permission.target, + "SessionKeyValidator: target mismatch" + ); + require( + uint256(bytes32(userOp.callData[36:68])) <= permission.valueLimit, + "SessionKeyValidator: value limit exceeded" + ); + require( + Operation(uint8(uint256(bytes32(userOp.callData[100:132])))) == permission.operation, + "SessionKeyValidator: operation mismatch" + ); + uint256 dataOffset = uint256(bytes32(userOp.callData[68:100])) + 4; // adding 4 for msg.sig + uint256 dataLength = uint256(bytes32(userOp.callData[dataOffset:dataOffset + 32])); + bytes calldata data = userOp.callData[dataOffset + 32:dataOffset + 32 + dataLength]; + require(bytes4(data[0:4]) == permission.sig, "SessionKeyValidator: sig mismatch"); + for (uint256 i = 0; i < permission.rules.length; i++) { + ParamRule memory rule = permission.rules[i]; + bytes32 param = bytes32(data[4 + rule.offset:4 + rule.offset + 32]); + if (rule.condition == ParamCondition.EQUAL) { + require(param == rule.param, "SessionKeyValidator: param mismatch"); + } else if (rule.condition == ParamCondition.GREATER_THAN) { + require(param > rule.param, "SessionKeyValidator: param mismatch"); + } else if (rule.condition == ParamCondition.LESS_THAN) { + require(param < rule.param, "SessionKeyValidator: param mismatch"); + } else if (rule.condition == ParamCondition.GREATER_THAN_OR_EQUAL) { + require(param >= rule.param, "SessionKeyValidator: param mismatch"); + } else if (rule.condition == ParamCondition.LESS_THAN_OR_EQUAL) { + require(param <= rule.param, "SessionKeyValidator: param mismatch"); + } else if (rule.condition == ParamCondition.NOT_EQUAL) { + require(param != rule.param, "SessionKeyValidator: param mismatch"); + } + } + bool result = MerkleProofLib.verify(merkleProof, session.merkleRoot, keccak256(abi.encode(permission))) + && (sessionKey == ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), signature)); + if (!result) { + return SIG_VALIDATION_FAILED; + } + return packValidationData(session.validAfter, session.validUntil); + } + + function validCaller(address, bytes calldata) external pure returns (bool) { + revert("SessionKeyValidator: not implemented"); + } + + function validateSignature(bytes32, bytes calldata) external pure returns (ValidationData) { + revert("SessionKeyValidator: not implemented"); + } +} diff --git a/tasks/test_userOp.ts b/tasks/test_userOp.ts new file mode 100644 index 00000000..25c14137 --- /dev/null +++ b/tasks/test_userOp.ts @@ -0,0 +1,102 @@ + +import { task } from "hardhat/config" +import { hexConcat, arrayify, hexZeroPad } from "ethers/lib/utils" + +const STACKUP = "https://api.stackup.sh/v1/node/" + +task("test-userop-initcode", "deploy erc20 paymaster") + .setAction(async (taskArgs, hre) => { + const signer = (await hre.ethers.getSigners())[0]; + const addr = await signer.getAddress(); + console.log("signer address: ", addr); + const entrypoint = await hre.ethers.getContractAt("EntryPoint", "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"); + const ecdsaFactory = await hre.ethers.getContractAt("ECDSAKernelFactory", "0x08e627ca6a0593c807091726a7fbb2887a1cb556"); + const account = await ecdsaFactory.getAccountAddress(addr, 3); + const kernel = await hre.ethers.getContractAt("Kernel", account); + console.log("maxFeePerGas : ", await hre.ethers.provider.getGasPrice()); + const userOp = { + sender : account, + nonce : 0, + initCode : hexConcat([ecdsaFactory.address, ecdsaFactory.interface.encodeFunctionData("createAccount", [addr, 3])]), + callData : kernel.interface.encodeFunctionData("execute", [addr,0,"0x",0]), + callGasLimit : 33100, + verificationGasLimit : 300000, + preVerificationGas : 300000, + maxFeePerGas: (await hre.ethers.provider.getGasPrice()).toHexString(), + maxPriorityFeePerGas: 1000000000, + paymasterAndData: "0x", + signature: "0x" + } + if((await hre.ethers.provider.getBalance(account)).lt(hre.ethers.BigNumber.from("100000000000000000"))) { + console.log("insufficient balance"); + await signer.sendTransaction({ + to: account, + value: hre.ethers.BigNumber.from("100000000000000000") + }) + } + + const stackup = new hre.ethers.providers.JsonRpcProvider(STACKUP); + userOp.signature = hexConcat(["0x00000000", hexZeroPad("0xb1", 65)]) + const gas = await stackup.send("eth_estimateUserOperationGas", [userOp, entrypoint.address]); + console.log("gas: ", gas); + userOp.callGasLimit = gas.callGasLimit; + userOp.verificationGasLimit = gas.verificationGas; + userOp.preVerificationGas = gas.preVerificationGas; + const userOpHash = await entrypoint.getUserOpHash(userOp); + const userOpHashHex = arrayify(userOpHash); + const userOpSig = await signer.signMessage(userOpHashHex); + + console.log("userOpSig: ", userOpSig); + userOp.signature = hexConcat(["0x00000000", userOpSig]) + const receipt = await stackup.send("eth_sendUserOperation", [userOp, entrypoint.address]); + }) + +task("test-userop", "test userop") + .setAction(async (taskArgs, hre) => { + const kernel_id = 3; + const signer = (await hre.ethers.getSigners())[0]; + const addr = await signer.getAddress(); + console.log("signer address: ", addr); + const entrypoint = await hre.ethers.getContractAt("EntryPoint", "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"); + const ecdsaFactory = await hre.ethers.getContractAt("ECDSAKernelFactory", "0x6b337f4ddb17b4ba93bcde99661ab46aec1d2823"); + const account = await ecdsaFactory.getAccountAddress(addr, kernel_id); + //await ecdsaFactory.createAccount(addr, kernel_id); + const kernel = await hre.ethers.getContractAt("Kernel", account); + console.log("maxFeePerGas : ", await hre.ethers.provider.getGasPrice()); + const userOp = { + sender : account, + nonce : (await entrypoint.getNonce(account,0)).toHexString(), + initCode : "0x", + callData : kernel.interface.encodeFunctionData("execute", [addr,0,"0x",0]), + callGasLimit : 33100, + verificationGasLimit : 300000, + preVerificationGas : 45100, + maxFeePerGas: (await hre.ethers.provider.getGasPrice()).toHexString(), + maxPriorityFeePerGas: 1000000000, + paymasterAndData: "0x", + signature: "0x" + } + if((await hre.ethers.provider.getBalance(account)).lt(hre.ethers.BigNumber.from("100000000000000000"))) { + console.log("insufficient balance"); + await signer.sendTransaction({ + to: account, + value: hre.ethers.BigNumber.from("100000000000000000") + }) + } + + const stackup = new hre.ethers.providers.JsonRpcProvider(STACKUP); + userOp.signature = hexConcat(["0x00000000", hexZeroPad("0x8f51af942b92e95ec77b4ae8b4197ca94373be26205746c506997587d0fd5efe6f5ea33ea7fcf09c9cd38216837c4739a8283d6f97e9977aa1f102fee5d0516b1b", 65)]) + const gas = await stackup.send("eth_estimateUserOperationGas", [userOp, entrypoint.address]); + console.log("gas: ", gas); + userOp.callGasLimit = gas.callGasLimit; + userOp.verificationGasLimit = gas.verificationGas; + userOp.preVerificationGas = gas.preVerificationGas; + const userOpHash = await entrypoint.getUserOpHash(userOp); + const userOpHashHex = arrayify(userOpHash); + const userOpSig = await signer.signMessage(userOpHashHex); + + console.log("userOpSig: ", userOpSig); + userOp.signature = hexConcat(["0x00000000", userOpSig]) + const receipt = await stackup.send("eth_sendUserOperation", [userOp, entrypoint.address]); + }) + diff --git a/test/foundry/ERC4337Utils.sol b/test/foundry/ERC4337Utils.sol deleted file mode 100644 index 598b466f..00000000 --- a/test/foundry/ERC4337Utils.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "account-abstraction/core/EntryPoint.sol"; -import "forge-std/Test.sol"; -import "openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol"; - -library ERC4337Utils { - function fillUserOp(EntryPoint _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(EntryPoint _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); - } -} diff --git a/test/foundry/Kernel.t.sol b/test/foundry/Kernel.t.sol new file mode 100644 index 00000000..52fedb2c --- /dev/null +++ b/test/foundry/Kernel.t.sol @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {EntryPoint} from "account-abstraction/core/EntryPoint.sol"; +import "src/factory/AdminLessERC1967Factory.sol"; +import "src/factory/KernelFactory.sol"; +import "src/Kernel.sol"; +import "src/validator/ECDSAValidator.sol"; +// test artifacts +import "src/test/TestValidator.sol"; +import "src/test/TestERC721.sol"; +import "src/test/TestKernel.sol"; +// test utils +import "forge-std/Test.sol"; +import {ERC4337Utils, KernelTestBase} from "./utils/ERC4337Utils.sol"; + +using ERC4337Utils for EntryPoint; + +contract KernelTest is KernelTestBase { + function setUp() public { + _initialize(); + defaultValidator = new ECDSAValidator(); + _setAddress(); + } + + function test_should_return_address_if_deployed() external { + console.log("Kernel", address(kernel)); + address proxy = factory.createAccount( + address(kernelImpl), + abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner)), + 0 + ); + assertEq(proxy, address(kernel)); + } + + function test_initialize_twice() external { + vm.expectRevert(); + kernel.initialize(defaultValidator, abi.encodePacked(owner)); + } + + function test_external_call_default() external { + vm.startPrank(owner); + (bool success,) = address(kernel).call(abi.encodePacked("Hello world")); + assertEq(success, true); + } + + function test_validate_signature() external { + Kernel kernel2 = Kernel( + payable( + address( + factory.createAccount( + address(kernelImpl), + abi.encodeWithSelector( + KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner) + ), + 1 + ) + ) + ) + ); + bytes32 hash = keccak256(abi.encodePacked("hello world")); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, hash); + assertEq(kernel2.isValidSignature(hash, abi.encodePacked(r, s, v)), Kernel.isValidSignature.selector); + } + + function test_validate_userOp() external { + TestKernel kernel2 = new TestKernel(entryPoint); + kernel2.sudoInitialize(defaultValidator, abi.encodePacked(owner)); + + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), abi.encodeWithSelector(Kernel.execute.selector, address(0), 0, bytes("")) + ); + op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); + bytes32 hash = entryPoint.getUserOpHash(op); + vm.startPrank(address(entryPoint)); + kernel2.validateUserOp(op, hash, 0); + vm.stopPrank(); + } + + function test_set_default_validator() external { + TestValidator newValidator = new TestValidator(); + bytes memory empty; + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector(KernelStorage.setDefaultValidator.selector, address(newValidator), empty) + ); + op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + entryPoint.handleOps(ops, beneficiary); + assertEq(address(KernelStorage(address(kernel)).getDefaultValidator()), address(newValidator)); + } + + function test_disable_mode() external { + vm.warp(1000); + bytes memory empty; + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector(KernelStorage.disableMode.selector, bytes4(0x00000001), address(0), empty) + ); + op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + entryPoint.handleOps(ops, beneficiary); + assertEq(uint256(bytes32(KernelStorage(address(kernel)).getDisabledMode())), 1 << 224); + } + + function test_set_execution() external { + console.log("owner", owner); + TestValidator newValidator = new TestValidator(); + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector( + KernelStorage.setExecution.selector, + bytes4(0xdeadbeef), + address(0xdead), + address(newValidator), + uint48(0), + uint48(0), + bytes("") + ) + ); + op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + entryPoint.handleOps(ops, beneficiary); + ExecutionDetail memory execution = KernelStorage(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 { + console.log("owner", owner); + TestValidator newValidator = new TestValidator(); + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector( + KernelStorage.setExecution.selector, + bytes4(0xdeadbeef), + address(0xdead), + address(newValidator), + uint48(0), + uint48(0), + bytes("") + ) + ); + op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + entryPoint.handleOps(ops, beneficiary); + ExecutionDetail memory execution = KernelStorage(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(); + } +} diff --git a/test/foundry/Kernel.test.sol b/test/foundry/Kernel.test.sol deleted file mode 100644 index 4e66d03f..00000000 --- a/test/foundry/Kernel.test.sol +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "src/factory/ECDSAKernelFactory.sol"; -import "src/Kernel.sol"; -import "src/validator/ECDSAValidator.sol"; -import "src/factory/EIP1967Proxy.sol"; -// test artifacts -import "src/test/TestValidator.sol"; -// test utils -import "forge-std/Test.sol"; -import {ERC4337Utils} from "./ERC4337Utils.sol"; - -using ERC4337Utils for EntryPoint; - -contract KernelTest is Test { - Kernel kernel; - KernelFactory factory; - ECDSAKernelFactory ecdsaFactory; - EntryPoint entryPoint; - ECDSAValidator validator; - address owner; - uint256 ownerKey; - address payable beneficiary; - - function setUp() public { - (owner, ownerKey) = makeAddrAndKey("owner"); - entryPoint = new EntryPoint(); - factory = new KernelFactory(entryPoint); - - validator = new ECDSAValidator(); - ecdsaFactory = new ECDSAKernelFactory(factory, validator); - - kernel = Kernel(payable(address(ecdsaFactory.createAccount(owner, 0)))); - vm.deal(address(kernel), 1e30); - beneficiary = payable(address(makeAddr("beneficiary"))); - } - - function test_initialize_twice() external { - vm.expectRevert(); - kernel.initialize(validator, abi.encodePacked(owner)); - } - - function test_initialize() public { - Kernel newKernel = Kernel( - payable( - address( - new EIP1967Proxy( - address(factory.kernelTemplate()), - abi.encodeWithSelector( - KernelStorage.initialize.selector, - validator, - abi.encodePacked(owner) - ) - ) - ) - ) - ); - ECDSAValidatorStorage memory storage_ = - ECDSAValidatorStorage(validator.ecdsaValidatorStorage(address(newKernel))); - assertEq(storage_.owner, owner); - } - - function test_validate_signature() external { - Kernel kernel2 = Kernel(payable(address(ecdsaFactory.createAccount(owner, 1)))); - bytes32 hash = keccak256(abi.encodePacked("hello world")); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, hash); - assertEq(kernel2.isValidSignature(hash, abi.encodePacked(r, s, v)), Kernel.isValidSignature.selector); - } - - function test_set_default_validator() external { - TestValidator newValidator = new TestValidator(); - bytes memory empty; - UserOperation memory op = entryPoint.fillUserOp( - address(kernel), - abi.encodeWithSelector(KernelStorage.setDefaultValidator.selector, address(newValidator), empty) - ); - op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); - UserOperation[] memory ops = new UserOperation[](1); - ops[0] = op; - entryPoint.handleOps(ops, beneficiary); - assertEq(address(KernelStorage(address(kernel)).getDefaultValidator()), address(newValidator)); - } - - function test_disable_mode() external { - bytes memory empty; - UserOperation memory op = entryPoint.fillUserOp( - address(kernel), abi.encodeWithSelector(KernelStorage.disableMode.selector, bytes4(0x00000001), address(0), empty) - ); - op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); - UserOperation[] memory ops = new UserOperation[](1); - ops[0] = op; - entryPoint.handleOps(ops, beneficiary); - assertEq(uint256(bytes32(KernelStorage(address(kernel)).getDisabledMode())), 1 << 224); - } - - function test_set_execution() external { - TestValidator newValidator = new TestValidator(); - UserOperation memory op = entryPoint.fillUserOp( - address(kernel), - abi.encodeWithSelector( - KernelStorage.setExecution.selector, - bytes4(0xdeadbeef), - address(0xdead), - address(newValidator), - uint48(0), - uint48(0), - bytes("") - ) - ); - op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); - UserOperation[] memory ops = new UserOperation[](1); - ops[0] = op; - entryPoint.handleOps(ops, beneficiary); - ExecutionDetail memory execution = KernelStorage(address(kernel)).getExecution(bytes4(0xdeadbeef)); - assertEq(execution.executor, address(0xdead)); - assertEq(address(execution.validator), address(newValidator)); - assertEq(uint256(execution.validUntil), uint256(0)); - assertEq(uint256(execution.validAfter), uint256(0)); - } -} diff --git a/test/foundry/KernelExecution.test.sol b/test/foundry/KernelExecution.t.sol similarity index 52% rename from test/foundry/KernelExecution.test.sol rename to test/foundry/KernelExecution.t.sol index 7fdfb342..21c87dea 100644 --- a/test/foundry/KernelExecution.test.sol +++ b/test/foundry/KernelExecution.t.sol @@ -1,51 +1,36 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import "src/factory/AdminLessERC1967Factory.sol"; import "src/Kernel.sol"; import "src/validator/ECDSAValidator.sol"; -import "src/factory/EIP1967Proxy.sol"; import "src/factory/KernelFactory.sol"; -import "src/factory/ECDSAKernelFactory.sol"; // test artifacts import "src/test/TestValidator.sol"; import "src/test/TestExecutor.sol"; import "src/test/TestERC721.sol"; // test utils import "forge-std/Test.sol"; -import {ERC4337Utils} from "./ERC4337Utils.sol"; +import "./utils/ERC4337Utils.sol"; // test actions/validators import "src/validator/ERC165SessionKeyValidator.sol"; -import "src/actions/ERC721Actions.sol"; +import "src/executor/TokenActions.sol"; using ERC4337Utils for EntryPoint; -contract KernelExecutionTest is Test { - Kernel kernel; - KernelFactory factory; - ECDSAKernelFactory ecdsaFactory; - EntryPoint entryPoint; - ECDSAValidator validator; - address owner; - uint256 ownerKey; - address payable beneficiary; - +contract KernelExecutionTest is KernelTestBase { function setUp() public { - (owner, ownerKey) = makeAddrAndKey("owner"); - entryPoint = new EntryPoint(); - factory = new KernelFactory(entryPoint); - - validator = new ECDSAValidator(); - ecdsaFactory = new ECDSAKernelFactory(factory, validator); - - kernel = Kernel(payable(address(ecdsaFactory.createAccount(owner, 0)))); - vm.deal(address(kernel), 1e30); - beneficiary = payable(address(makeAddr("beneficiary"))); + _initialize(); + defaultValidator = new ECDSAValidator(); + _setAddress(); } function test_revert_when_mode_disabled() external { + vm.warp(1000); bytes memory empty; UserOperation memory op = entryPoint.fillUserOp( - address(kernel), abi.encodeWithSelector(KernelStorage.disableMode.selector, bytes4(0x00000001), address(0), empty) + address(kernel), + abi.encodeWithSelector(KernelStorage.disableMode.selector, bytes4(0x00000001), address(0), empty) ); op.signature = abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); UserOperation[] memory ops = new UserOperation[](1); @@ -60,9 +45,7 @@ contract KernelExecutionTest is Test { ops[0] = op; vm.expectRevert( - abi.encodeWithSelector( - IEntryPoint.FailedOp.selector, 0, string.concat("AA23 reverted: ", "kernel: mode disabled") - ) + abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, string.concat("AA23 reverted (or OOG)")) ); entryPoint.handleOps(ops, beneficiary); } @@ -147,49 +130,63 @@ contract KernelExecutionTest is Test { function test_mode_2_erc165() external { ERC165SessionKeyValidator sessionKeyValidator = new ERC165SessionKeyValidator(); - ERC721Actions action = new ERC721Actions(); + TokenActions action = new TokenActions(); TestERC721 erc721 = new TestERC721(); erc721.mint(address(kernel), 0); erc721.mint(address(kernel), 1); - UserOperation memory op = - entryPoint.fillUserOp(address(kernel), abi.encodeWithSelector(ERC721Actions.transferERC721Action.selector, address(erc721), 0, address(0xdead))); + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector(TokenActions.transferERC721Action.selector, address(erc721), 0, address(0xdead)) + ); address sessionKeyAddr; uint256 sessionKeyPriv; (sessionKeyAddr, sessionKeyPriv) = makeAddrAndKey("sessionKey"); - bytes memory enableData = abi.encodePacked(sessionKeyAddr, type(IERC721).interfaceId, ERC721Actions.transferERC721Action.selector, uint48(0), uint48(0), uint32(16)); - { - bytes32 digest = getTypedDataHash( - address(kernel), ERC721Actions.transferERC721Action.selector, 0, 0, address(sessionKeyValidator), address(action), - enableData - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); - - op.signature = abi.encodePacked( - bytes4(0x00000002), + bytes memory enableData = abi.encodePacked( + sessionKeyAddr, + type(IERC721).interfaceId, + TokenActions.transferERC721Action.selector, uint48(0), uint48(0), - address(sessionKeyValidator), - address(action), - uint256(enableData.length), - enableData, - uint256(65), - r, - s, - v + uint32(16) ); + { + bytes32 digest = getTypedDataHash( + address(kernel), + TokenActions.transferERC721Action.selector, + 0, + 0, + address(sessionKeyValidator), + address(action), + enableData + ); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); + + op.signature = abi.encodePacked( + bytes4(0x00000002), + uint48(0), + uint48(0), + address(sessionKeyValidator), + address(action), + uint256(enableData.length), + enableData, + uint256(65), + r, + s, + v + ); } - op.signature = bytes.concat( - op.signature, - entryPoint.signUserOpHash(vm, sessionKeyPriv, op) - ); + op.signature = bytes.concat(op.signature, entryPoint.signUserOpHash(vm, sessionKeyPriv, op)); UserOperation[] memory ops = new UserOperation[](1); ops[0] = op; logGas(op); entryPoint.handleOps(ops, beneficiary); - op = entryPoint.fillUserOp(address(kernel), abi.encodeWithSelector(ERC721Actions.transferERC721Action.selector, address(erc721), 1, address(0xdead))); + op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector(TokenActions.transferERC721Action.selector, address(erc721), 1, address(0xdead)) + ); op.signature = abi.encodePacked(bytes4(0x00000001), entryPoint.signUserOpHash(vm, sessionKeyPriv, op)); ops[0] = op; logGas(op); @@ -197,71 +194,4 @@ contract KernelExecutionTest is Test { assertEq(erc721.ownerOf(0), address(0xdead)); } - - function logGas(UserOperation memory op) internal returns(uint256 used) { - try this.consoleGasUsage(op) { - revert("should revert"); - } catch Error(string memory reason) { - used = abi.decode(bytes(reason), (uint256)); - console.log("validation gas usage :", used); - } - } - - function consoleGasUsage(UserOperation memory op) external { - uint256 gas = gasleft(); - vm.startPrank(address(entryPoint)); - kernel.validateUserOp(op, entryPoint.getUserOpHash(op), 0); - vm.stopPrank(); - revert(string(abi.encodePacked(gas - gasleft()))); - } -} - -// computes the hash of a permit -function getStructHash( - bytes4 sig, - uint48 validUntil, - uint48 validAfter, - address validator, - address executor, - bytes memory enableData -) 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) - ) - ); -} - -// computes the hash of the fully encoded EIP-712 message for the domain, which can be used to recover the signer -function getTypedDataHash( - address sender, - bytes4 sig, - uint48 validUntil, - uint48 validAfter, - address validator, - address executor, - bytes memory enableData -) view returns (bytes32) { - return keccak256( - abi.encodePacked( - "\x19\x01", - _buildDomainSeparator("Kernel", "0.0.2", sender), - getStructHash(sig, validUntil, validAfter, validator, executor, enableData) - ) - ); -} - -function _buildDomainSeparator(string memory name, string memory version, address verifyingContract) - 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/test/foundry/KernelHelper.t.sol b/test/foundry/KernelHelper.t.sol new file mode 100644 index 00000000..dd85fb74 --- /dev/null +++ b/test/foundry/KernelHelper.t.sol @@ -0,0 +1,31 @@ +pragma solidity ^0.8.0; + +import "forge-std/Test.sol"; +import "src/utils/KernelHelper.sol"; +import {_packValidationData} from "account-abstraction/core/Helpers.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)); + } +} diff --git a/test/foundry/utils/ERC4337Utils.sol b/test/foundry/utils/ERC4337Utils.sol new file mode 100644 index 00000000..bd962523 --- /dev/null +++ b/test/foundry/utils/ERC4337Utils.sol @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {EntryPoint, UserOperation} from "account-abstraction/core/EntryPoint.sol"; +import "forge-std/Test.sol"; +import "solady/utils/ECDSA.sol"; +import "src/Kernel.sol"; +import "src/factory/KernelFactory.sol"; +import "src/validator/ECDSAValidator.sol"; + +abstract contract KernelTestBase is Test { + Kernel kernel; + Kernel kernelImpl; + KernelFactory factory; + EntryPoint entryPoint; + IKernelValidator defaultValidator; + address owner; + uint256 ownerKey; + address payable beneficiary; + address factoryOwner; + + function _initialize() internal { + (owner, ownerKey) = makeAddrAndKey("owner"); + (factoryOwner,) = makeAddrAndKey("factoryOwner"); + beneficiary = payable(address(makeAddr("beneficiary"))); + entryPoint = new EntryPoint(); + kernelImpl = new Kernel(entryPoint); + factory = new KernelFactory(factoryOwner, entryPoint); + vm.startPrank(factoryOwner); + factory.setImplementation(address(kernelImpl), true); + vm.stopPrank(); + } + + function _setAddress() internal { + kernel = Kernel( + payable( + address( + factory.createAccount( + address(kernelImpl), + abi.encodeWithSelector( + KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner) + ), + 0 + ) + ) + ) + ); + vm.deal(address(kernel), 1e30); + } + + function logGas(UserOperation memory op) internal returns (uint256 used) { + try this.consoleGasUsage(op) { + revert("should revert"); + } catch Error(string memory reason) { + used = abi.decode(bytes(reason), (uint256)); + console.log("validation gas usage :", used); + } + } + + function consoleGasUsage(UserOperation memory op) external { + uint256 gas = gasleft(); + vm.startPrank(address(entryPoint)); + kernel.validateUserOp(op, entryPoint.getUserOpHash(op), 0); + vm.stopPrank(); + revert(string(abi.encodePacked(gas - gasleft()))); + } +} + +library ERC4337Utils { + function fillUserOp(EntryPoint _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(EntryPoint _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 +) 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) + ) + ); +} + +// computes the hash of the fully encoded EIP-712 message for the domain, which can be used to recover the signer +function getTypedDataHash( + address sender, + bytes4 sig, + uint48 validUntil, + uint48 validAfter, + address validator, + address executor, + bytes memory enableData +) view returns (bytes32) { + return keccak256( + abi.encodePacked( + "\x19\x01", + _buildDomainSeparator("Kernel", "0.2.1", sender), + getStructHash(sig, validUntil, validAfter, validator, executor, enableData) + ) + ); +} + +function _buildDomainSeparator(string memory name, string memory version, address verifyingContract) + 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/test/foundry/validator/SessionKeyValidator.t.sol b/test/foundry/validator/SessionKeyValidator.t.sol new file mode 100644 index 00000000..06349669 --- /dev/null +++ b/test/foundry/validator/SessionKeyValidator.t.sol @@ -0,0 +1,367 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "src/factory/AdminLessERC1967Factory.sol"; +import "src/Kernel.sol"; +import "src/validator/ECDSAValidator.sol"; +import "src/factory/KernelFactory.sol"; +// test artifacts +import "src/test/TestValidator.sol"; +import "src/test/TestExecutor.sol"; +import "src/test/TestERC721.sol"; +import "src/test/TestERC20.sol"; +// test utils +import "forge-std/Test.sol"; +import "test/foundry/utils/ERC4337Utils.sol"; +// test actions/validators +import "src/validator/SessionKeyValidator.sol"; + +using ERC4337Utils for EntryPoint; + +contract SessionKeyValidatorTest is KernelTestBase { + ExecuteSessionKeyValidator sessionKeyValidator; + TestERC20 testToken; + address sessionKey; + uint256 sessionKeyPriv; + + function setUp() public { + _initialize(); + defaultValidator = new ECDSAValidator(); + _setAddress(); + (sessionKey, sessionKeyPriv) = makeAddrAndKey("sessionKey"); + testToken = new TestERC20(); + sessionKeyValidator = new ExecuteSessionKeyValidator(); + } + + function test_mode_2_no_paymaster() external { + testToken.mint(address(kernel), 100e18); + TestERC20 testToken2 = new TestERC20(); + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector( + Kernel.execute.selector, + address(testToken), + 0, + abi.encodeWithSelector(ERC20.transfer.selector, beneficiary, 100), + Operation.Call + ) + ); + + ParamRule[] memory rules = new ParamRule[](1); + rules[0] = ParamRule({offset: 32, condition: ParamCondition.LESS_THAN_OR_EQUAL, param: bytes32(uint256(1e18))}); + + bytes32[] memory data = new bytes32[](2); + data[0] = keccak256( + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken), + sig: ERC20.transfer.selector, + operation: Operation.Call, + rules: rules + }) + ) + ); + + data[1] = keccak256( + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken2), + sig: ERC20.transfer.selector, + operation: Operation.Call, + rules: rules + }) + ) + ); + + bytes32 merkleRoot = _getRoot(data); + bytes memory enableData = abi.encodePacked(sessionKey, merkleRoot, uint48(0), uint48(0), address(0)); + bytes32 digest = getTypedDataHash( + address(kernel), Kernel.execute.selector, 0, 0, address(sessionKeyValidator), address(0), enableData + ); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); + + op.signature = abi.encodePacked( + bytes4(0x00000002), + uint48(0), + uint48(0), + address(sessionKeyValidator), + address(0), + uint256(enableData.length), + enableData, + uint256(65), + r, + s, + v + ); + op.signature = bytes.concat( + op.signature, + abi.encodePacked( + sessionKey, + entryPoint.signUserOpHash(vm, sessionKeyPriv, op), + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken), + sig: ERC20.transfer.selector, + operation: Operation.Call, + rules: rules + }), + _getProof(data, 0) + ) + ) + ); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + logGas(op); + + entryPoint.handleOps(ops, beneficiary); + } + + function test_mode_2_no_paymaster_delegate_call() external { + testToken.mint(address(kernel), 100e18); + TestERC20 testToken2 = new TestERC20(); + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector( + Kernel.execute.selector, + address(testToken), + 0, + abi.encodeWithSelector(ERC20.transfer.selector, beneficiary, 100), + Operation.DelegateCall + ) + ); + + ParamRule[] memory rules = new ParamRule[](1); + rules[0] = ParamRule({offset: 32, condition: ParamCondition.LESS_THAN_OR_EQUAL, param: bytes32(uint256(1e18))}); + + bytes32[] memory data = new bytes32[](2); + data[0] = keccak256( + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken), + sig: ERC20.transfer.selector, + operation: Operation.DelegateCall, + rules: rules + }) + ) + ); + + data[1] = keccak256( + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken2), + sig: ERC20.transfer.selector, + operation: Operation.Call, + rules: rules + }) + ) + ); + + bytes32 merkleRoot = _getRoot(data); + bytes memory enableData = abi.encodePacked(sessionKey, merkleRoot, uint48(0), uint48(0), address(0)); + bytes32 digest = getTypedDataHash( + address(kernel), Kernel.execute.selector, 0, 0, address(sessionKeyValidator), address(0), enableData + ); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); + + op.signature = abi.encodePacked( + bytes4(0x00000002), + uint48(0), + uint48(0), + address(sessionKeyValidator), + address(0), + uint256(enableData.length), + enableData, + uint256(65), + r, + s, + v + ); + op.signature = bytes.concat( + op.signature, + abi.encodePacked( + sessionKey, + entryPoint.signUserOpHash(vm, sessionKeyPriv, op), + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken), + sig: ERC20.transfer.selector, + operation: Operation.DelegateCall, + rules: rules + }), + _getProof(data, 0) + ) + ) + ); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + logGas(op); + + entryPoint.handleOps(ops, beneficiary); + } + + function test_mode_2_no_paymaster_wrong_param() external { + testToken.mint(address(kernel), 100e18); + TestERC20 testToken2 = new TestERC20(); + UserOperation memory op = entryPoint.fillUserOp( + address(kernel), + abi.encodeWithSelector( + Kernel.execute.selector, + address(testToken), + 0, + abi.encodeWithSelector(ERC20.transfer.selector, beneficiary, 100), + Operation.Call + ) + ); + + ParamRule[] memory rules = new ParamRule[](1); + rules[0] = ParamRule({offset: 32, condition: ParamCondition.LESS_THAN_OR_EQUAL, param: bytes32(uint256(1e18))}); + + bytes32[] memory data = new bytes32[](2); + data[0] = keccak256( + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken), + sig: ERC20.transfer.selector, + operation: Operation.Call, + rules: rules + }) + ) + ); + + data[1] = keccak256( + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken2), + sig: ERC20.transfer.selector, + operation: Operation.Call, + rules: rules + }) + ) + ); + + bytes32 merkleRoot = _getRoot(data); + bytes memory enableData = abi.encodePacked(sessionKey, merkleRoot, uint48(0), uint48(0), address(0)); + bytes32 digest = getTypedDataHash( + address(kernel), Kernel.execute.selector, 0, 0, address(sessionKeyValidator), address(0), enableData + ); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); + + op.signature = abi.encodePacked( + bytes4(0x00000002), + uint48(0), + uint48(0), + address(sessionKeyValidator), + address(0), + uint256(enableData.length), + enableData, + uint256(65), + r, + s, + v + ); + op.signature = bytes.concat( + op.signature, + abi.encodePacked( + sessionKey, + entryPoint.signUserOpHash(vm, sessionKeyPriv, op), + abi.encode( + Permission({ + valueLimit: 0, + target: address(testToken), + sig: ERC20.transfer.selector, + operation: Operation.DelegateCall, + rules: rules + }), + _getProof(data, 0) + ) + ) + ); + UserOperation[] memory ops = new UserOperation[](1); + ops[0] = op; + logGas(op); + + vm.expectRevert(); + entryPoint.handleOps(ops, beneficiary); + } +} +// Following code is adapted from https://github.com/dmfxyz/murky/blob/main/src/common/MurkyBase.sol. + +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) 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) + } + + 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) + } +}